この記事の内容は、MySQL がマルチテーブル クエリをどのように実装するかを紹介することです。 MySQL のマルチテーブル クエリ ステートメント。困っている友人は参考にしていただければ幸いです。
#テーブルの作成# 创建表 create table department(id int,name varchar(20)); create table employee1( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); # 插入数据 insert into department values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营'); insert into employee1(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('tom','male',38,201),('yuanhao','female',28,202),('lidawei','male',18,200),('jinkezhou','female',18,204); # 查看表 mysql> select * from employee1; +----+-----------+--------+------+--------+ | id | name | sex | age | dep_id | +----+-----------+--------+------+--------+ | 1 | egon | male | 18 | 200 | | 2 | alex | female | 48 | 201 | | 3 | tom | male | 38 | 201 | | 4 | yuanhao | female | 28 | 202 | | 5 | lidawei | male | 18 | 200 | | 6 | jinkezhou | female | 18 | 204 | +----+-----------+--------+------+--------+ 6 rows in set (0.00 sec) mysql> select * from department; +------+--------------+ | id | name | +------+--------------+ | 200 | 技术 | | 201 | 人力资源 | | 202 | 销售 | | 203 | 运营 | +------+--------------+ 4 rows in set (0.00 sec)
複数のテーブル接続クエリ
クロス接続
クロス結合: 一致条件は適用されません。デカルト積の生成mysql> select * from employee1 ,department;
内部結合
内部結合: 2 つのテーブルの共通部分を見つけます。これは、条件を使用して導出するのと同じです。デカルト積 正しい結果が結果から除外されました。 (一致する行のみを接続します)# 找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果 #department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来 mysql> select * from employee1,department where employee1.dep_id=department.id; #上面用where表示的可以用下面的内连接表示,建议使用下面的那种方法 mysql> select * from employee1 inner join department on employee1.dep_id=department.id; # 也可以这样表示哈 mysql> select employee1.id,employee1.name,employee1.age,employee1.sex,department.name from employee1,department where employee1.dep_id=department.id;
左結合 left
左側のテーブル内のすべてのレコードを優先的に表示します。#左链接:在按照on的条件取到两张表共同部分的基础上,保留左表的记录 mysql> select * from employee1 left join department on department.id=employee1.dep_id; mysql> select * from department left join employee1 on department.id=employee1.dep_id;
Right joinright
最初に右のテーブル内のすべてのレコードを表示します。#右链接:在按照on的条件取到两张表共同部分的基础上,保留右表的记录 mysql> select * from employee1 right join department on department.id=employee1.dep_id; mysql> select * from department right join employee1 on department.id=employee1.dep_id;
All join join
mysql> select * from department full join employee1;
条件を満たす複数のテーブル クエリ
例 1: 内部結合を使用して従業員テーブルと部門テーブルをクエリします。従業員テーブルの年齢フィールド値は 25 より大きい必要があります。つまり、すべての部門で 25 歳以上の従業員を検索します。会社の
mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25;例 2: 内部結合を使用して従業員テーブルと部門テーブルをクエリし、年齢フィールドを昇順で表示します。
mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25 and age>25 order by age asc;
サブクエリ
#1:子查询是将一个查询语句嵌套在另一个查询语句中。 #2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。 #3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字 #4:还可以包含比较运算符:= 、 !=、> 、<等例:
# 查询平均年龄在25岁以上的部门名 mysql> select name from department where id in ( select dep_id from employee1 group by dep_id having avg(age) > 25 ); # 查看技术部员工姓名 mysql> select name from employee1 where dep_id = (select id from department where name='技术'); # 查看小于2人的部门名 mysql> select name from department where id in (select dep_id from employee1 group by dep_id having count(id) < 2) union select name from department where id not in (select distinct dep_id from employee1); # 提取空部门 #有人的部门 mysql> select * from department where id not in (select distinct dep_id from employee1);
以上がMySQL でマルチテーブル クエリを実装するにはどうすればよいですか? MySQL のマルチテーブル クエリ ステートメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。