目錄
模版表
一、ORDER BY語(yǔ)法
1.1語(yǔ)法
?1.2升序
?1.3降序
?1.4多高字段排序
二、AND/OR--且/或
2.1AND
2.2OR
2.3嵌套/多條件
?三、distinct 查詢不重復(fù)記錄
3.1語(yǔ)法
四、GROUP? BY語(yǔ)法
4.1語(yǔ)法
?五、限制結(jié)果條目(limit)
5.1語(yǔ)法
?5.2實(shí)驗(yàn)
五、設(shè)置別名(alias----as)
5.1語(yǔ)法
5.2實(shí)驗(yàn)
?5.4查詢info表的字段數(shù)量,以number顯示
?5.5 AS 還可以作為連接語(yǔ)句的操作符。 創(chuàng)建t1表,將info表的查詢記錄全部插入info_bak表
六、通配符
?6.1 %
?6.2 _
七、接下來(lái)的內(nèi)容請(qǐng)看MySQL高階語(yǔ)句之二
MySQL高階語(yǔ)句之二
模版表
create table info (id int,name varchar(10) primary key not null ,score decimal(5,2),address varchar(20),hobbid int(5));
insert into ky29 values(1,'liuyi',80,'beijing',2);
insert into ky29 values(2,'wangwu',90,'shengzheng',2);
insert into ky29 values(3,'lisi',60,'shanghai',4);
insert into ky29 values(4,'tianqi',99,'hangzhou',5);
insert into ky29 values(5,'jiaoshou',98,'laowo',3);
insert into ky29 values(6,'hanmeimei',10,'nanjing',3);
insert into ky29 values(7,'lilei',11,'nanjing',5);
select * from info;
一、ORDER BY語(yǔ)法
使用 SELECT 語(yǔ)句可以將需要的數(shù)據(jù)從 MySQL 數(shù)據(jù)庫(kù)中查詢出來(lái),如果對(duì)查詢的結(jié)果進(jìn)行排序,可以使用 ORDER BY 語(yǔ)句來(lái)對(duì)語(yǔ)句實(shí)現(xiàn)排序,并最終將排序后的結(jié)果返回給用戶。這個(gè)語(yǔ)句的排序不光可以針對(duì)某一個(gè)字段,也可以針對(duì)多個(gè)字段
1.1語(yǔ)法
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
?ASC 是按照升序進(jìn)行排序的,是默認(rèn)的排序方式,即 ASC 可以省略。SELECT 語(yǔ)句中如果沒有指定具體的排序方式,則默認(rèn)按 ASC方式進(jìn)行排序。
DESC 是按降序方式進(jìn) 行排列。當(dāng)然 ORDER BY 前面也可以使用 WHERE 子句對(duì)查詢結(jié)果進(jìn)一步過濾。
?1.2升序
#以score參照,做升序
#不寫默認(rèn)是升序
select id,name,score from info3 order by score;
?1.3降序
#以score為對(duì)象,做降序
select id,name,score from info3 order by score desc;
?1.4多高字段排序
?ORDER BY 語(yǔ)句也可以使用多個(gè)字段來(lái)進(jìn)行排序,當(dāng)排序的第一個(gè)字段相同的記錄有多條的情況下,這些多條的記錄再按照第二個(gè)字段進(jìn)行排序,ORDER BY 后面跟多個(gè)字段時(shí),字段之間使用英文逗號(hào)隔開,優(yōu)先級(jí)是按先后順序而定 但order by 之后的第一個(gè)參數(shù)只有在出現(xiàn)相同值時(shí),第二個(gè)字段才有意義
mysql> select id,name,score,hobbid from info3 order by hobbid desc,id desc;
+------+-----------+-------+--------+
| id | name | score | hobbid |
+------+-----------+-------+--------+
| 7 | jixiaoman | 63.00 | 5 |
| 4 | tangsan | 50.00 | 5 |
| 3 | lisi | 60.00 | 4 |
| 6 | lilei | 18.00 | 3 |
| 5 | hanmei | 10.00 | 3 |
| 2 | wangwu | 90.00 | 2 |
| 1 | luiyi | 80.00 | 2 |
+------+-----------+-------+--------+
7 rows in set (0.00 sec)
二、AND/OR--且/或
2.1AND
mysql> select * from info3 where score > 70 and score <= 90;
+------+--------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+--------+-------+------------+--------+
| 1 | luiyi | 80.00 | beijing | 2 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
+------+--------+-------+------------+--------+
2 rows in set (0.00 sec)
2.2OR
mysql> select * from info3 where score > 70 or score <= 90;
+------+-----------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+-----------+-------+------------+--------+
| 5 | hanmei | 10.00 | nanjing | 3 |
| 7 | jixiaoman | 63.00 | guizhou | 5 |
| 6 | lilei | 18.00 | kunshan | 3 |
| 3 | lisi | 60.00 | shandong | 4 |
| 1 | luiyi | 80.00 | beijing | 2 |
| 4 | tangsan | 50.00 | laowo | 5 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
+------+-----------+-------+------------+--------+
7 rows in set (0.00 sec)
2.3嵌套/多條件
#嵌套方式,先執(zhí)行嵌套里面的,在執(zhí)行外面的。
mysql> select * from info3 where score > 70 or (score >60 and score <90);
+------+-----------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+-----------+-------+------------+--------+
| 7 | jixiaoman | 63.00 | guizhou | 5 |
| 1 | luiyi | 80.00 | beijing | 2 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
+------+-----------+-------+------------+--------+
3 rows in set (0.00 sec)
?三、distinct 查詢不重復(fù)記錄
3.1語(yǔ)法
select distinct 字段 from 表名﹔
mysql> select distinct hobbid from info3;
+--------+
| hobbid |
+--------+
| 3 |
| 5 |
| 4 |
| 2 |
+--------+
4 rows in set (0.00 sec)
四、GROUP? BY語(yǔ)法
通過 SQL 查詢出來(lái)的結(jié)果,還可以對(duì)其進(jìn)行分組,使用 GROUP BY 語(yǔ)句來(lái)實(shí)現(xiàn) ,GROUP BY 通常都是結(jié)合聚合函數(shù)一起使用的,常用的聚合函數(shù)包括:計(jì)數(shù)(COUNT)、 求和(SUM)、求平均數(shù)(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分組的時(shí)候可以按一個(gè)或多個(gè)字段對(duì)結(jié)果進(jìn)行分組處理。
4.1語(yǔ)法
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator value GROUP BY column_name;
?按hobbid相同的分組,計(jì)算相同分?jǐn)?shù)的學(xué)生個(gè)數(shù)(基于name個(gè)數(shù)進(jìn)行計(jì)數(shù))
mysql> select count(name),hobbid from info3 group by hobbid;
+-------------+--------+
| count(name) | hobbid |
+-------------+--------+
| 2 | 2 |
| 2 | 3 |
| 1 | 4 |
| 2 | 5 |
+-------------+--------+
4 rows in set (0.00 sec)
結(jié)合where語(yǔ)句,篩選分?jǐn)?shù)大于等于70的分組,計(jì)算學(xué)生個(gè)數(shù)
mysql> select count(name),hobbid from info3 where score >=70 gr
oup by hobbid;
+-------------+--------+
| count(name) | hobbid |
+-------------+--------+
| 2 | 2 |
+-------------+--------+
1 row in set (0.00 sec)
?結(jié)合order by把計(jì)算出的學(xué)生個(gè)數(shù)按升序排列
mysql> select count(name),score,hobbid from info3 where score>=10 group by hobbid order by count(name) asc;
+-------------+-------+--------+
| count(name) | score | hobbid |
+-------------+-------+--------+
| 1 | 60.00 | 4 |
| 2 | 10.00 | 3 |
| 2 | 63.00 | 5 |
| 2 | 80.00 | 2 |
+-------------+-------+--------+
4 rows in set (0.00 sec)
?五、限制結(jié)果條目(limit)
limit 限制輸出的結(jié)果記錄
在使用 MySQL SELECT 語(yǔ)句進(jìn)行查詢時(shí),結(jié)果集返回的是所有匹配的記錄(行)。有時(shí)候僅 需要返回第一行或者前幾行,這時(shí)候就需要用到 LIMIT 子句
LIMIT 的第一個(gè)參數(shù)是位置偏移量(可選參數(shù)),是設(shè)置 MySQL 從哪一行開始顯示。 如果不設(shè)定第一個(gè)參數(shù),將會(huì)從表中的第一條記錄開始顯示。需要注意的是,第一條記錄的 位置偏移量是 0,第二條是 1,以此類推。第二個(gè)參數(shù)是設(shè)置返回記錄行的最大數(shù)目。
5.1語(yǔ)法
SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
?5.2實(shí)驗(yàn)
查詢所有信息顯示前4行記錄
mysql> select * from info3 limit 4;
+------+-----------+-------+----------+--------+
| id | name | score | address | hobbid |
+------+-----------+-------+----------+--------+
| 5 | hanmei | 10.00 | nanjing | 3 |
| 7 | jixiaoman | 63.00 | guizhou | 5 |
| 6 | lilei | 18.00 | kunshan | 3 |
| 3 | lisi | 60.00 | shandong | 4 |
+------+-----------+-------+----------+--------+
4 rows in set (0.00 sec)
?從第5行開始,往后顯示3行內(nèi)容
mysql> select * from info3 limit 4,3;
+------+---------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+---------+-------+------------+--------+
| 1 | luiyi | 80.00 | beijing | 2 |
| 4 | tangsan | 50.00 | laowo | 5 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
+------+---------+-------+------------+--------+
3 rows in set (0.00 sec)
?結(jié)合order by語(yǔ)句,按id的大小升序排列顯示前三行
mysql> select * from info3 order by id limit 3;
+------+--------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+--------+-------+------------+--------+
| 1 | luiyi | 80.00 | beijing | 2 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
| 3 | lisi | 60.00 | shandong | 4 |
+------+--------+-------+------------+--------+
3 rows in set (0.00 sec)
五、設(shè)置別名(alias----as)
在 MySQL 查詢時(shí),當(dāng)表的名字比較長(zhǎng)或者表內(nèi)某些字段比較長(zhǎng)時(shí),為了方便書寫或者 多次使用相同的表,可以給字段列或表設(shè)置別名。使用的時(shí)候直接使用別名,簡(jiǎn)潔明了,增強(qiáng)可讀性
5.1語(yǔ)法
#對(duì)于列的別名:
SELECT column_name AS alias_name FROM table_name;
#對(duì)于表的別名:
SELECT column_name(s) FROM table_name AS alias_name;
在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 語(yǔ)句是可選的。AS 之后的別名,主要是為表內(nèi)的列或者表提供臨時(shí)的名稱,在查詢過程中使用,庫(kù)內(nèi)實(shí)際的表名 或字段名是不會(huì)被改變的 ?
5.2實(shí)驗(yàn)
mysql> select id as 序號(hào),name as 姓名,score as 成績(jī) from info3 order by id;
+--------+-----------+--------+
| 序號(hào) | 姓名 | 成績(jī) |
+--------+-----------+--------+
| 1 | luiyi | 80.00 |
| 2 | wangwu | 90.00 |
| 3 | lisi | 60.00 |
| 4 | tangsan | 50.00 |
| 5 | hanmei | 10.00 |
| 6 | lilei | 18.00 |
| 7 | jixiaoman | 63.00 |
+--------+-----------+--------+
7 rows in set (0.00 sec)
?5.4查詢info表的字段數(shù)量,以number顯示
mysql> select count(*) 姓名 from info3;
+--------+
| 姓名 |
+--------+
| 7 |
+--------+
1 row in set (0.00 sec)
mysql> select count(*) number from info3;
+--------+
| number |
+--------+
| 7 |
+--------+
1 row in set (0.00 sec)
mysql> select count(*) 數(shù)量 from info3;
+--------+
| 數(shù)量 |
+--------+
| 7 |
+--------+
1 row in set (0.00 sec)
mysql> select count(*) as 數(shù)量 from info3;
+--------+
| 數(shù)量 |
+--------+
| 7 |
+--------+
1 row in set (0.00 sec)
?5.5 AS 還可以作為連接語(yǔ)句的操作符。 創(chuàng)建t1表,將info表的查詢記錄全部插入info_bak表
此處AS起到的作用:
1、創(chuàng)建了一個(gè)新表t1 并定義表結(jié)構(gòu),插入表數(shù)據(jù)(與info表相同)
2、但是”約束“沒有被完全”復(fù)制“過來(lái) #但是如果原表設(shè)置了主鍵,那么附表的:default字段會(huì)默認(rèn)設(shè)置一個(gè)0 相似。
mysql> create table info_bak (select * from info3);
Query OK, 7 rows affected (0.01 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> show tables;
+----------------+
| Tables_in_text |
+----------------+
| info1 |
| info2 |
| info3 |
| info_bak |
+----------------+
4 rows in set (0.00 sec)
mysql> desc info_bak;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(10) | NO | | NULL | |
| score | decimal(5,2) | YES | | NULL | |
| address | varchar(20) | YES | | NULL | |
| hobbid | int(5) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> select * from info_bak;
+------+-----------+-------+------------+--------+
| id | name | score | address | hobbid |
+------+-----------+-------+------------+--------+
| 5 | hanmei | 10.00 | nanjing | 3 |
| 7 | jixiaoman | 63.00 | guizhou | 5 |
| 6 | lilei | 18.00 | kunshan | 3 |
| 3 | lisi | 60.00 | shandong | 4 |
| 1 | luiyi | 80.00 | beijing | 2 |
| 4 | tangsan | 50.00 | laowo | 5 |
| 2 | wangwu | 90.00 | shengzheng | 2 |
+------+-----------+-------+------------+--------+
7 rows in set (0.00 sec)
六、通配符
通配符主要用于替換字符串中的部分字符,通過部分字符的匹配將相關(guān)結(jié)果查詢出來(lái)。
通常通配符都是跟 LIKE 一起使用的,并協(xié)同 WHERE 子句共同來(lái)完成查詢?nèi)蝿?wù)。常用的通配符有兩個(gè),分別是:
%:表示零個(gè)、一個(gè)或多個(gè)字符文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-581573.html
_:下劃線表示單個(gè)字符文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-581573.html
?6.1 %
mysql> select id,name from info3 where name like 'li%'
-> ;
+------+-------+
| id | name |
+------+-------+
| 6 | lilei |
| 3 | lisi |
+------+-------+
2 rows in set (0.00 sec)
?6.2 _
mysql> select id,name from info3 where name like 'wang__';
+------+--------+
| id | name |
+------+--------+
| 2 | wangwu |
+------+--------+
1 row in set (0.00 sec)
七、接下來(lái)的內(nèi)容請(qǐng)看MySQL高階語(yǔ)句之二
MySQL高階語(yǔ)句之二
到了這里,關(guān)于MySQL高階語(yǔ)句的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!