MySQL查詢語句大全(列舉所有常用查詢方式)

前提條件

首先創建SQL測試文件,其中創建了一個庫兩個表,用於測試。

文件名稱:test.sql

/*------------員工信息庫-------------*/
create database staff;
use staff;
create table yunwei(id int not null primary key,name char(4) not null,age tinyint(3) unsigned not null,sex enum('man','woman') not null);
create table caiwu(id int not null primary key,name char(4) not null,age tinyint(3) unsigned not null,sex enum('man','woman') not null);
insert into yunwei values(1,'張三',20,'man'),(2,'張四',21,'man'),(3,'張莉',22,'woman'),(4,'張五',23,'man'),(5,'張六',24,'man'),(6,'張麗',25,'woman');
insert into caiwu values(1,'李一',24,'man'),(2,'李莉',23,'woman'),(3,'李二',22,'man'),(4,'李三',21,'man'),(5,'李四',20,'man'),(6,'李麗',19,'woman');

將SQL文件導入到數據庫中

mysql < test.sql

導入完成後,在staff庫下有兩張表,分別是yunwei和caiwu

mysql> select * from staff.yunwei;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 張三   |  20 | man   |
|  2 | 張四   |  21 | man   |
|  3 | 張莉   |  22 | woman |
|  4 | 張五   |  23 | man   |
|  5 | 張六   |  24 | man   |
|  6 | 張麗   |  25 | woman |
+----+--------+-----+-------+
mysql> select * from staff.caiwu;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 李一   |  24 | man   |
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李麗   |  19 | woman |
+----+--------+-----+-------+

簡單查詢

直接查詢

語法:select 字段 from 表名;

最簡單的一種查詢方式,可查看多個字段或整張表。

例如:查詢運維表姓名及年齡

mysql> select name,age from yunwei;
+--------+-----+
| name   | age |
+--------+-----+
| 張三   |  20 |
| 張四   |  21 |
| 張莉   |  22 |
| 張五   |  23 |
| 張六   |  24 |
| 張麗   |  25 |
+--------+-----+

條件查詢

關鍵字爲where,通常位於表名後面

語法:select 字段 from 表名 where 條件;

根據條件,查詢指定條件的字段。

例如:查詢財務表中年齡爲20的員工

mysql> select * from caiwu where age=20;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  5 | 李四   |  20 | man |
+----+--------+-----+-----+

模糊查詢

關鍵字是like,通常位於條件字段後面

語法:select 字段 from 表名 where 字段 like ‘%數據%’;

通過輸入具體的數據,來對記錄進行查詢

例如:模糊查詢caiwu表中姓名字段還有三的記錄

mysql> select * from caiwu where name like '%三%';
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  4 | 李三   |  21 | man |
+----+--------+-----+-----+

算數運算符

運算符一般配合邏輯運算符一起使用,可以使條件限制更加具體。

符號 作用
> 大於
< 小於
= 等於
!= 不等於
<> 與!=同義,不等於
>= 大於等於
<= 小於等於

通過邏輯運算符可以將條件限制在一個範圍內。

例如:查看caiwu表中id不等於1的記錄

mysql> select * from caiwu where id!=1;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李麗   |  19 | woman |
+----+--------+-----+-------+

邏輯運算符

可以將查詢的單個條件改爲多個條件或滿足多個條件中的一個。

符號 作用
and 與,同時滿足多個條件
or 或,滿足多個條件中的一個即可
not 否,不滿足條件

和算數運算符一起使用,可以將條件更加具體。

例如:查詢yunwei表中性別爲女,或年齡爲23的記錄

mysql> select * from yunwei where sex='woman' or age=23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  3 | 張莉   |  22 | woman |
|  4 | 張五   |  23 | man   |
|  6 | 張麗   |  25 | woman |
+----+--------+-----+-------+

in與not in運算符

關鍵字爲in,通常位於條件字段後面

語法:select 字段 from 表名 where 字段 in (列表);

符號 作用
in 在一個條件列表中
not in 不在一個條件列表中

例如:查詢yunwei表中,年齡爲22-25之間的記錄

mysql> select * from yunwei where age in(22,23,24,25);
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  3 | 張莉   |  22 | woman |
|  4 | 張五   |  23 | man   |
|  5 | 張六   |  24 | man   |
|  6 | 張麗   |  25 | woman |
+----+--------+-----+-------+

排序查詢

關鍵字爲order byasc,desc,通常位於表名之後

排序分爲兩種,升序(asc)和降序(desc)

語法:select 字段 from 表名 order by 字段 排序方式;

例如:將caiwu表中記錄按年齡從大到小查詢

mysql> select * from caiwu order by age desc;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  1 | 李一   |  24 | man   |
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
|  5 | 李四   |  20 | man   |
|  6 | 李麗   |  19 | woman |
+----+--------+-----+-------+

高級查詢

範圍運算

關鍵字爲between…and…,通常位於條件字段後面。

語法:select 字段 from 表名 where 字段 between 範圍1 and 範圍2;

也是用來限制查詢範圍,作爲算數運算符的一種替換。

例如:查詢caiwu表中,年齡爲21-23的記錄,使用算數運算符表示爲age>=21 and age<=23,使用範圍運算嘖表示爲age between 21 and 23。

mysql> select *from caiwu where age >=21 and age<=23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
+----+--------+-----+-------+
mysql> select *from caiwu where age between 21 and 23;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 李莉   |  23 | woman |
|  3 | 李二   |  22 | man   |
|  4 | 李三   |  21 | man   |
+----+--------+-----+-------+

限制查詢

關鍵字爲limit,通常位於表名後面。

語法:select 字段 from 表名 limit n,m;

limit可以強制指定查詢結果的記錄條數。

n是開始記錄行,0表示第一條記錄,m表示顯示行,從n開始,共顯示幾行記錄。

時刻注意開始範圍時從0開始的,1表示的是第二行,而非第一行。
顯示範圍就是共顯示幾條記錄,並不是結束範圍。

例如:查詢yunwei表中第2-4行記錄

mysql> select * from yunwei limit 1,3;
+----+--------+-----+-------+
| id | name   | age | sex   |
+----+--------+-----+-------+
|  2 | 張四   |  21 | man   |
|  3 | 張莉   |  22 | woman |
|  4 | 張五   |  23 | man   |
+----+--------+-----+-------+

命令解讀:查詢yunwei表中記錄,從第二行開始,共顯示三行。

嵌套查詢

沒有關鍵字,嵌套查詢分爲查詢語句和子查詢語句,在查詢語句中含有子查詢語句,所以叫做嵌套查詢。

嵌套子查詢通常位於查詢語句的條件之後。

例如:在caiwu表中查詢名稱爲張三的字段。

先在caiwu表中添加一個張三字段,並且年齡不同

mysql> insert into caiwu values(7,'張三',25,'man');

通過子查詢的方式,查詢caiwu和yunwei表中名稱字段相同的字段

mysql> select name,age from caiwu where name=(select name  from yunwei where age=20);
+--------+-----+
| name   | age |
+--------+-----+
| 張三   |  25 |
+--------+-----+

前半段是正常的查詢語句,name=()中爲子查詢語句,查詢的字段爲name,查找yunwei表中age爲20的name,結果爲張三,將結果執行外部的查詢語句,就完成了。

使用嵌套查詢,兩個表必須要有一個關聯字段,否則無法實現。

測試完成後,將添加的字段刪除即可。

多表連查

多表連查全稱多表連接查詢,和嵌套子查詢一樣,都需要有一個共同的字段,然後將多個表連接在一起查詢,將符合條件的組成一個合集。

常見連接:內連接,外連接

內連接

根據兩個表中共有的字段進行匹配,然後將符合條件的合集進行拼接。

關鍵字爲inner join…on…,通常位於表名後面。

語法:select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段;

on後面的是連接條件,也就是表1和表2共有的字段

例如:將yunwei和caiwu表連接在一起

mysql> select * from yunwei inner join caiwu on caiwu.id=yunwei.id ;
+----+--------+-----+-------+----+--------+-----+-------+
| id | name   | age | sex   | id | name   | age | sex   |
+----+--------+-----+-------+----+--------+-----+-------+
|  1 | 張三   |  20 | man   |  1 | 李一   |  24 | man   |
|  2 | 張四   |  21 | man   |  2 | 李莉   |  23 | woman |
|  3 | 張莉   |  22 | woman |  3 | 李二   |  22 | man   |
|  4 | 張五   |  23 | man   |  4 | 李三   |  21 | man   |
|  5 | 張六   |  24 | man   |  5 | 李四   |  20 | man   |
|  6 | 張麗   |  25 | woman |  6 | 李麗   |  19 | woman |
+----+--------+-----+-------+----+--------+-----+-------+

左連接

關鍵字爲left join…on,通常位於表名後面

語法:select 字段 from 表1 left join 表2 on 連接條件;

左連接是左表爲主表,指定字段都顯示,右表爲從表,沒內容顯示null。

使用左連接將兩個表連接到一起

mysql> select * from yunwei left join caiwu on yunwei.id=caiwu.id;
+----+--------+-----+-------+------+--------+------+-------+
| id | name   | age | sex   | id   | name   | age  | sex   |
+----+--------+-----+-------+------+--------+------+-------+
|  1 | 張三   |  20 | man   |    1 | 李一   |   24 | man   |
|  2 | 張四   |  21 | man   |    2 | 李莉   |   23 | woman |
|  3 | 張莉   |  22 | woman |    3 | 李二   |   22 | man   |
|  4 | 張五   |  23 | man   |    4 | 李三   |   21 | man   |
|  5 | 張六   |  24 | man   |    5 | 李四   |   20 | man   |
|  6 | 張麗   |  25 | woman |    6 | 李麗   |   19 | woman |
+----+--------+-----+-------+------+--------+------+-------+

右連接

關鍵字爲right join,通常位於表名後面

語法:select 字段 from 表1 right join 表2 on 連接條件

右連接是以右表爲主表,指定字段都顯示,左表爲從表,沒內容顯示null。

使用右連接將兩個表連接在一起

mysql> select * from yunwei right join caiwu on yunwei.id=caiwu.id;
+------+--------+------+-------+----+--------+-----+-------+
| id   | name   | age  | sex   | id | name   | age | sex   |
+------+--------+------+-------+----+--------+-----+-------+
|    1 | 張三   |   20 | man   |  1 | 李一   |  24 | man   |
|    2 | 張四   |   21 | man   |  2 | 李莉   |  23 | woman |
|    3 | 張莉   |   22 | woman |  3 | 李二   |  22 | man   |
|    4 | 張五   |   23 | man   |  4 | 李三   |  21 | man   |
|    5 | 張六   |   24 | man   |  5 | 李四   |  20 | man   |
|    6 | 張麗   |   25 | woman |  6 | 李麗   |  19 | woman |
+------+--------+------+-------+----+--------+-----+-------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章