この記事は、mysql データベースが知っておくべき SQL ステートメントの拡張バージョンに関する記事を共有します。非常に優れており、必要な方は参考にしてください。
この記事は、質問と拡張バージョンです。 SQL文は以下の通りです。
users テーブルを作成し、id、名前、性別、sal フィールドを設定します。id は主キーです
drop table if exists users; create table if not exists users( id int(5) primary key auto_increment, name varchar(10) unique not null, gender varchar(1) not null, sal int(5) not null ); insert into users(name,gender,sal) values('AA','男',1000); insert into users(name,gender,sal) values('BB','女',1200);
------ ----- -------------------------------------- ----- -------------
一対一: AA の識別番号は何ですか
drop table if exists users; create table if not exists users( id int(5) primary key auto_increment, name varchar(10) unique not null, gender varchar(1) not null, sal int(5) not null ); insert into users(name,gender,sal) values('AA','男',1000); insert into users(name,gender,sal) values('BB','女',1200); drop table if exists cards; create table if not exists cards( id int(5) primary key auto_increment, num int(3) not null unique, loc varchar(10) not null, uid int(5) not null unique, constraint uid_fk foreign key(uid) references users(id) ); insert into cards(num,loc,uid) values(111,'北京',1); insert into cards(num,loc,uid) values(222,'上海',2);
[注: 内部結合は内部結合を意味します]
りー
- -------------------------------------- ------
1 対多: 「開発部門」に所属する従業員をクエリする
グループ テーブルを作成する
select u.name "姓名",c.num "身份证号" from users u inner join cards c on u.id = c.uid where u.name = 'AA'; -- select u.name "姓名",c.num "身份证号" from users u inner join cards c on u.id = c.uid where name = 'AA';
emps テーブルを作成する
drop table if exists groups; create table if not exists groups( id int(5) primary key auto_increment, name varchar(10) not null ); insert into groups(name) values('开发部'); insert into groups(name) values('销售部');
従業員が誰であるかをクエリする「開発部」にて
drop table if exists emps; create table if not exists emps( id int(5) primary key auto_increment, name varchar(10) not null, gid int(5) not null, constraint gid_fk foreign key(gid) references groups(id) ); insert into emps(name,gid) values('哈哈',1); insert into emps(name,gid) values('呵呵',1); insert into emps(name,gid) values('嘻嘻',2); insert into emps(name,gid) values('笨笨',2);
--- ----------------------------------- --------------- -
多対多: 生徒「Zhao」が教えたクエリ
生徒テーブルを作成
select g.name "部门",e.name "员工" from groups g inner join emps e on g.id = e.gid where g.name = '开发部'; -- select g.name "部门",e.name "员工" from groups g inner join emps e on g.id = e.gid where g.name = '开发部';
教師テーブルを作成
drop table if exists students; create table if not exists students( id int(5) primary key auto_increment, name varchar(10) not null ); insert into students(name) values('哈哈'); insert into students(name) values('嘻嘻');
中間テーブルの主キー(sid,tid)を作成します。 Express 結合された主キー、これら 2 つのフィールド全体が一意である必要があります
drop table if exists teachers; create table if not exists teachers( id int(5) primary key auto_increment, name varchar(10) not null ); insert into teachers(name) values('赵'); insert into teachers(name) values('刘');
生徒「Zhao」が教えたクエリ
----------------------------------------------------------- ------------------------------ -------------------- -------------------
収入が 5,000 元を超える従業員 (含む) は「高給」としてマークし、それ以外の場合は「初任給」としてマークします
給与が NULL の従業員を「給与なし」としてマークします
給与が 5,000 元 (含む) を超える従業員を「高給与」としてマークします、それ以外の場合は「初任給」とマークします
7,000 元の従業員をマークします6,000元の従業員は「中給与」、5,000元は「初任給」、それ以外の従業員は「試用給与」としてマークされます
--- -------------- ------------------------------------ -------------- ------------------------------------ --
内部結合 (等価結合): 顧客名のクエリ、注文番号、注文価格
[注: 顧客 c 内部結合注文 o はエイリアスを使用し、o は将来の注文を表します]
drop table if exists middles; create table if not exists middles( sid int(5), constraint sid_fk foreign key(sid) references students(id), tid int(5), constraint tid_fk foreign key(tid) references teachers(id), primary key(sid,tid) ); insert into middles(sid,tid) values(1,1); insert into middles(sid,tid) values(1,2); insert into middles(sid,tid) values(2,1); insert into middles(sid,tid) values(2,2);
on + 2 つのテーブルを接続するための条件。 1 つのテーブルと 1 つのテーブルの外部キーの結合
内部結合: 接続条件に従って 2 つのテーブルに存在するレコードのみをクエリできます。これは数学の交差に似ています
--- ----- --------------------------------------
外部結合:顧客ごとにグループ化し、各顧客の名前と注文番号をクエリします
外部結合: 接続条件に従って両方のテーブルに存在するレコードをクエリしたり、一方の当事者を他方の当事者に強制的に接続することもできます条件を満たすレコードもクエリできます。
外部結合は次のように分割できます。
select t.name "老师",s.name "学生" from students s inner join middles m inner join teachers t on (s.id=m.sid) and (m.tid=t.id) where t.name = '赵'; -- select t.name "老师",s.name "学生" from students s inner join middles m inner join teachers t on (s.id=m.sid) and (t.id=m.tid) where t.name = "赵";
左外部結合は、左側のコンテンツが表示されることを意味します。顧客の特定の列の内容がすべて表示されます
-------------------------------- ---------------- --------
自己関係: AA の上司が EE かどうか調べてください。自分自身を 2 つのテーブルだと考えてください。両側に 1 つずつ
select c.name "客户姓名",o.isbn "订单编号",o.price "订单价格" from customers c inner join orders o on c.id = o.customers_id; -- select c.name "客户姓名",o.isbn "订单编号",o.price "订单价格" from customers c inner join orsers o on c.id = o.customers_id;
-------------------------------------- --- --------------------------------------------------- --- -------
MySQL の関数のデモ (クエリマニュアル)
日付と時刻の関数:
<左外连接 : 以左侧为参照,left outer join表示 select c.name,count(o.isbn) from customers c left outer join orders o on c.id = o.customers_id group by c.name; -- >右外连接 : 以右侧为参照,right outer join表示 select c.name,count(o.isbn) from orders o right outer join customers c on c.id = o.customers_id group by c.name;
文字列関数:
select users.ename,bosss.ename from emps users inner join emps bosss on users.mgr = bosss.empno; select users.ename,bosss.ename from emps users left outer join emps bosss on users.mgr = bosss.empno;
数学関数:
select addtime('2016-8-7 23:23:23','1:1:1'); 时间相加 select current_date(); select current_time(); select now(); select year( now() ); select month( now() ); select day( now() ); select datediff('2016-12-31',now());
暗号化関数:
select md5('123456');
32 ビットの 16 進数 e10adc3949ba59abbe56e057f20f883e を返します
MySQL のプロセス制御ステートメントを示します
select charset('哈哈'); select concat('你好','哈哈','吗'); select instr('www.baidu.com','baidu'); select substring('www.baidu.com',5,3);
5000 元になります (給与が NULL の従業員は「給与なし」としてマークされます
select bin(10); select floor(3.14);//比3.14小的最大整数---正3 select floor(-3.14);//比-3.14小的最大整数---负4 select ceiling(3.14);//比3.14大的最小整数---正4 select ceiling(-3.14);//比-3.14大的最小整数---负3,一定是整数值 select format(3.1415926,3);保留小数点后3位,四舍五入 select mod(10,3);//取余数 select rand();//
5,000 元 (込み) を超える給与を得る従業員には「高給与」のマークが付けられ、それ以外の場合は「高給与」のマークが付けられます「初任給」
use json; drop table if exists users; create table if not exists users( id int(5) primary key auto_increment, name varchar(10) not null unique, sal int(5) ); insert into users(name,sal) values('哈哈',3000); insert into users(name,sal) values('呵呵',4000); insert into users(name,sal) values('嘻嘻',5000); insert into users(name,sal) values('笨笨',6000); insert into users(name,sal) values('明明',7000); insert into users(name,sal) values('丝丝',8000); insert into users(name,sal) values('君君',9000); insert into users(name,sal) values('赵赵',10000); insert into users(name,sal) values('无名',NULL);
りー
以上がMySQl データベースが知っておく必要がある SQL ステートメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。