1、現有兩表如下
# t_student +----+----------+------+------+-------+ | id | name | age | sex | class | +----+----------+------+------+-------+ | 1 | zhangsan | 18 | boy | 1 | | 2 | wangwu | 20 | boy | 1 | | 3 | zhaoliu | 19 | boy | 2 | | 4 | lisi | 22 | girl | NULL | +----+----------+------+------+-------+ # t_course +------+-------+---------+ | id | score | subject | +------+-------+---------+ | 1 | 80 | English | | 1 | 79 | Chinese | | 2 | 90 | English | | 2 | 56 | Chinese | | 3 | 77 | English | | 3 | 100 | Chinese | +------+-------+---------+
2、子查詢(一個查詢嵌套另一個查詢)
- 標量 子查詢(回傳一個值)
- 把一個 sql 執行回傳的一個值,作為另一個 sql 的一個條件
- 標量子查詢可以使用符號 >,>=,<,<=,=,!=,<> 進行比較判斷
mysql> select * from t_course where id = (select id from t_student where name = "zhangsan"); +------+-------+---------+ | id | score | subject | +------+-------+---------+ | 1 | 80 | English | | 1 | 79 | Chinese | +------+-------+---------+
- 列 子查詢 (回傳一個列)
- 執行一個 sql 把回傳的一個列作為另一個 sql 條件
- 列子查詢使用符號 in,not in
# 查詢出 1 班所有學生的成績資訊 mysql> select * from t_course where id in (select id from t_student where class = 1); +------+-------+---------+ | id | score | subject | +------+-------+---------+ | 1 | 80 | English | | 1 | 79 | Chinese | | 2 | 90 | English | | 2 | 56 | Chinese | +------+-------+---------+
- 行 子查詢 (回傳一行多列)
SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)
- 表 子查詢 (回傳一個表)
- 執行一個 sql 回傳的是一個表
- 如下實體中 a 為別名
mysql> select name from (select * from t_student)a; +----------+ | name | +----------+ | zhangsan | | wangwu | | zhaoliu | | lisi | +----------+
3、多表連接
- 內連接查詢(查詢兩個表都符合條件的資料)
- 關鍵字 inner join
- 基本格式如下
- select 欄位 from 表1 inner join 表2 on 表1.欄位 = 表2.欄位
# 查詢出每個人的英語成績分別是多少 mysql> select a.name,b.score,b.subject from t_student a inner join t_course b on a.id = b.id where subject = "English"; +----------+-------+---------+ | name | score | subject | +----------+-------+---------+ | zhangsan | 80 | English | | wangwu | 90 | English | | zhaoliu | 77 | English | +----------+-------+---------+
- 左連接查詢(左邊表中資料顯示全部,以左表為準)
- 關鍵字 left join
- 基本格式如下
- select 欄位 from 表1 left join 表2 on 表1.欄位 = 表2.欄位
mysql> select * from t_student a left join t_course b on a.id = b.id; +----+----------+------+------+-------+------+-------+---------+ | id | name | age | sex | class | id | score | subject | +----+----------+------+------+-------+------+-------+---------+ | 1 | zhangsan | 18 | boy | 1 | 1 | 80 | English | | 1 | zhangsan | 18 | boy | 1 | 1 | 79 | Chinese | | 2 | wangwu | 20 | boy | 1 | 2 | 90 | English | | 2 | wangwu | 20 | boy | 1 | 2 | 56 | Chinese | | 3 | zhaoliu | 19 | boy | 2 | 3 | 77 | English | | 3 | zhaoliu | 19 | boy | 2 | 3 | 100 | Chinese | | 4 | lisi | 22 | girl | NULL | NULL | NULL | NULL | +----+----------+------+------+-------+------+-------+---------+
- 右連接查詢(右邊表中資料顯示全部,以右表為準)
- 關鍵字 right join
- 基本格式如下
- select 欄位 from 表1 right join 表2 on 表1.欄位 = 表2.欄位
mysql> select * from t_student a right join t_course b on a.id = b.id; +------+----------+------+------+-------+------+-------+---------+ | id | name | age | sex | class | id | score | subject | +------+----------+------+------+-------+------+-------+---------+ | 1 | zhangsan | 18 | boy | 1 | 1 | 80 | English | | 1 | zhangsan | 18 | boy | 1 | 1 | 79 | Chinese | | 2 | wangwu | 20 | boy | 1 | 2 | 90 | English | | 2 | wangwu | 20 | boy | 1 | 2 | 56 | Chinese | | 3 | zhaoliu | 19 | boy | 2 | 3 | 77 | English | | 3 | zhaoliu | 19 | boy | 2 | 3 | 100 | Chinese | +------+----------+------+------+-------+------+-------+---------+
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/58182.html
標籤:MySQL
上一篇:MySQL 增刪改查(單表)
