Mysql原生文--マルチテーブル
5021 ワード
開始する前に、テーブルを作成し、テーブルとデータの準備をする必要があります.
マルチテーブルのクエリーです.主に2つのクエリーに分けられます.この2つのクエリーは、マルチテーブル接続クエリーとサブクエリーの2つです.
複数テーブル接続クエリー
1.交差接続:一致条件は適用されません.デカルト積を生成します.
2.内部接続
3.外部ジョインの左ジョイン:左テーブルの全レコードを優先的に表示する
4.外部ジョインの右ジョイン:右テーブルの全レコードを優先的に表示する
5.全外接続:左右2つのテーブルのすべてのレコードを表示する
6.適合接続クエリー
サブクエリ
1.INキー付きサブクエリ
2.比較演算子付きサブクエリ
3 EXISTSキーワード付きサブクエリ
EXISTS関字キーが存在することを示す.EXISTSキーワードを使用している場合、内部レベルクエリ文はクエリのレコードを返さない.真偽の値を返します.TrueまたはFalseがTrueを返すと、外部クエリー文がクエリーされます.戻り値がFalseの場合、外部クエリー文はクエリーされません.
1.
create table department(
id int,
name varchar(20)
);
create table employee(
id int primary key auto_increment,
name varchar(20),
sex enmu('male','female') not null default = 'male',
age int,
dep_id int,
constraint fk_id foreign key(dep_id) references department(id),
);
2.
insert into department values
(200,' '),
(201,' '),
(202,' '),
(203,' ');
insert into employee (name,sex,age,dep_id)values
('egon','male',18,200),
('alex','female',48,201),
('wupeiqi','male',38,201),
('yuanhao','female',28,202),
('liwenzhou','male',18,200),
('jingliyang','female',18,204);
#
desc department;
desc employee;
#
select * from department;
select * from employee;
マルチテーブルのクエリーです.主に2つのクエリーに分けられます.この2つのクエリーは、マルチテーブル接続クエリーとサブクエリーの2つです.
複数テーブル接続クエリー
1.交差接続:一致条件は適用されません.デカルト積を生成します.
select * from employee,department;
2.内部接続
# , 。
# department 204 , employee 204
select employee.id,employee.name,employee.age,employee.sex,department.name from employee inner join department on employee.dep_id=department.id;
sql sql
select employee.id,employee.name,employee.age,employee.sex,department.name from employee,department where employee.dep_id=department.id;
3.外部ジョインの左ジョイン:左テーブルの全レコードを優先的に表示する
# , ,
# :
select employee.id,employee.name,department.name as depart_name from employee letf join department on employee.dep_id=department.id;
4.外部ジョインの右ジョイン:右テーブルの全レコードを優先的に表示する
# , ,
# :
select employee.id,employee.name,department.name as depart_name from employee right join department on empolyee.dep_id=department.id;
5.全外接続:左右2つのテーブルのすべてのレコードを表示する
select * from employee left join department on employee.dep_id = department.id
union
select * from employee right join department on employee.dep_id = department.id;
# union union all :union
6.適合接続クエリー
# 1: employee department , employee age 25, 25
select employee.name,department.name from employee inner join department on employee.dep_id=department.id where age > 25;
# 2: employee department , age
select employee.id,employee.name,employee.age,department.name from employee inner join department on employee.dep_id=department.id order by age asc;
サブクエリ
# 1. 。
# 2. , 。
#3: :IN、NOT IN、ANY、ALL、EXISTS NOT EXISTS
#4: := 、 !=、> 、
1.INキー付きサブクエリ
# 25
select id,name from department
where id in
(select dep_id from employee group by dep_id having avg(age) > 25);
sql 。
select department.name from employee inner join department on employee.dep_id=department.id where employee.age > (select avg(age) from employee group by dep_id);
#
select name from employee
where dep_id in
(select id from department where name=' ');
# 1 ( id)
select name from department where id not in (select distinct dep_id from employee);
2.比較演算子付きサブクエリ
# :=、!=、>、>=、
#
mysql> select name,age from emp where age > (select avg(age) from emp);
+---------+------+
| name | age |
+---------+------+
| alex | 48 |
| wupeiqi | 38 |
+---------+------+
2 rows in set (0.00 sec)
# 、
select t1.name,t1.age from emp t1
inner join
(select dep_id,avg(age) avg_age from emp group by dep_id) t2
on t1.dep_id = t2.dep_id
where t1.age > t2.avg_age;
3 EXISTSキーワード付きサブクエリ
EXISTS関字キーが存在することを示す.EXISTSキーワードを使用している場合、内部レベルクエリ文はクエリのレコードを返さない.真偽の値を返します.TrueまたはFalseがTrueを返すと、外部クエリー文がクエリーされます.戻り値がFalseの場合、外部クエリー文はクエリーされません.
#department dept_id=203,Ture
mysql> select * from employee
-> where exists
-> (select id from department where id=200);
+----+------------+--------+------+--------+
| id | name | sex | age | dep_id |
+----+------------+--------+------+--------+
| 1 | egon | male | 18 | 200 |
| 2 | alex | female | 48 | 201 |
| 3 | wupeiqi | male | 38 | 201 |
| 4 | yuanhao | female | 28 | 202 |
| 5 | liwenzhou | male | 18 | 200 |
| 6 | jingliyang | female | 18 | 204 |
+----+------------+--------+------+--------+
#department dept_id=205,False
mysql> select * from employee
-> where exists
-> (select id from department where id=204);
Empty set (0.00 sec)