DQL:数据库查询语句
目錄
?
?一.常用DQL語句:數據庫查詢語句
1.最基本的通用查詢:查詢全表數據
2.查詢指定列
3.通過起別名進行查詢
1)對列起別名
AS可以省略
?2)對表起別名(表的名字比較長),同時給列起別名
?4.帶條件查詢
1)where后面跟單個條件,可以使用賦值運算符=,比較運算符<,>,<=,>=,!=
2)where后面跟多個條件,并列條件或者或關系的條件
3)where條件后面可以跟某個字段為null的格式
?5.模糊查詢
1 )匹配任意字符:%
?2 )一個下劃線代表一個任意字符值:_
?6.聚合函數查詢
1)常見的聚合函數
7.復雜查詢和聚合查詢一起使用
8.排序查詢
1)單個字段排序
?2)多個字段排序
9.homework
?1)查詢表中所有學生的信息。
?2)查詢表中所有學生的姓名和英語成績
?3)過濾表中重復數據。(去重的關鍵字 distinct)
?4)統計每個學生的總分
?5)在所有學生總分數上加10分特長分。
?6)使用別名表示學生分數。
?7)查詢姓名為行哥的學生成績
??8)查詢英語成績大于90分的同學
??9)查詢總分大于200分的所有同學
?10)查詢英語分數在 80~90之間的同學。
?11)查詢數學分數為89,90,91的同學。
?12)查詢所有姓白的學生英語成績。
?13) 查詢數學分>80并且語文分>80的同學
?14)查詢英語>80或者總分>200的同學
?15)對數學成績升序排序
?16)對總分降序排序,然后再按數學從高到低的順序輸出
?17)對姓白的學生成績排序輸出(排序規則自己定義)總分升序
?18)查詢數學成績大于等于平均分的所有學生信息
??19)查詢出英語成績最高分的學生信息
?20)模糊查詢出學生姓名中第二個字是金的學生信息
?21)查詢出英語成績平均分是多少
22)查詢出數學總分是多少
23)查詢學生表中有多少記錄
創建庫
-- 創建庫 CREATE DATABASE mysql_01;選擇庫mysql_01
-- 選擇庫 USE mysql_01;創建表
-- 創建表 CREATE TABLE student (id INT,-- 編號NAME VARCHAR (20),-- 姓名age INT,-- 年齡 sex VARCHAR (5),-- 性別 address VARCHAR (100),-- 地址 math INT,-- 數學english INT-- 英語 );查看全表數據
-- 查看全表數據 SELECT * FROM student;插入數據
-- 插入數據 INSERT INTO student (id,NAME,age,sex,address,math,english ) VALUES(1, '唐僧', 55, '男', ' 杭州', 66, 78),(2,'孫悟空',45,'男','深圳',98,87),(3,'豬八戒',55,'男','香港',56,77),(4, '沙僧', 20, '男', '湖南', 76, 65),(5,'柳青',20,'男','湖南',86,NULL),(6, '柳紅', 19, '女', '香港 ', 99, 99),(7,'小燕子',22,'女','香港',99,99),(8,'德瑪西亞',18,'男','南京',56,65) ;?一.常用DQL語句:數據庫查詢語句
查詢不會對數據庫中的數據進行修改.只是一種顯示數據的方式
1.最基本的通用查詢:查詢全表數據
使用*表示所有列
SELECT * FROM 表名;
-- 查詢全表數據 -- SELECT * FROM 表名; -- 查詢所有學生 SELECT * FROM student;注:實際開發中,寫sql的時候,不能書寫*,書寫具體的字段名稱
SELECT id,NAME,age,sex,address,math,english FROMstudent ;2.查詢指定列
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
SELECT address FROMstudent ;上述運算結果為
地址字段出現數據冗余,也就是重復性太多了
?通過關鍵字distinct,將地址字段冗余數據去重
SELECT DISTINCT address FROMstudent ;運算結果為
3.通過起別名進行查詢
使用別名的好處: 顯示的時候使用自己需要的名字,并不修改表的結構
1)對列起別名
SELECT `字段名?1` AS 別名, `字段名 2` AS 別名... FROM 表名;
SELECT student.id AS '編號',-- 編號student.`name` AS '姓名',-- 姓名student.`age` AS '年齡',-- 年齡student.`sex` AS '性別',-- 性別student.`address` AS '地址',-- 地址student.`math` AS '數學成績',-- 數學成績student.`english` AS '英語成績' -- 英語成績 FROMstudent ;AS可以省略
SELECT student.id '編號',-- 編號student.`name` '姓名',-- 姓名student.`age` '年齡',-- 年齡student.`sex` '性別',-- 性別student.`address` '地址',-- 地址student.`math` '數學成績',-- 數學成績student.`english` '英語成績' -- 英語成績 FROMstudent ;2)對表起別名(表的名字比較長),同時給列起別名
1)查詢全表:SELECT? 字段名1??AS 別名, 字段名2?AS 別名... FROM 表名 AS 別名;
SELECT s.id AS '編號',-- 編號s.name AS '姓名',-- 姓名s.age AS '年齡',-- 年齡s.sex AS '性別',-- 性別s.address AS '地址',-- 地址s.math AS '數學成績',-- 數學成績s.english AS '英語成績' -- 英語成績 FROMstudent AS s ;可以給字段名帶上`符號,如下述的代碼,也可以不帶上`
as可以省略
SELECT s.id '編號',-- 編號s.`name` '姓名',-- 姓名s.`age` '年齡',-- 年齡s.`sex` '性別',-- 性別s.`address` '地址',-- 地址s.`math` '數學成績',-- 數學成績s.`english` '英語成績' -- 英語成績 FROMstudent s ;2)查詢的時候可以將字段為整數類型的數據進行求和
需求:查詢學院的id,name,age,sex以及數據和英語成績的總分
-- 需求:查詢學院的id,name,age,sex以及數據和英語成績的總分 SELECT id '學生編號',NAME '學生姓名',age '學生年齡',sex '學生性別',(math + english) '總分' FROMstudent ;?根據運算結果可以發現學生編號為5的柳青總分為null空值
注意事項:兩個整數類型求和,如果其中一個字段是null值,求和結果為null(沒意義)空值
在mysql中有函數ifnull(字段名稱,給期望值);
如果當前字段名稱為null值,可以給它一個期望值
SELECT id '學生編號',NAME '學生姓名',age '學生年齡',sex '學生性別',(math + IFNULL(english, 0)) '總分' -- 當英語成績是null空值,給一個期望值0 FROMstudent ;?4.帶條件查詢
select 指定的字段名稱 from 表名 where 條件;
1)where后面跟單個條件,可以使用賦值運算符=,比較運算符<,>,<=,>=,!=
賦值運算符
需求:查詢年齡是20歲的學生的所有信息
SELECT * FROMstudent WHERE age = 20 ;比較運算符
?需求:查詢學生的年齡大于等于20?的學生
SELECT NAME '學生姓名',age '學生年齡',sex '學生性別',(math + IFNULL(english, 0)) '總分' FROMstudent WHERE age <= 20 ;?需求:查詢學生年齡不為20歲的學生所有信息!=
語法1:
SELECT * FROMstudent WHERE age != 20 ;語法2: 針對上述語法,在mysql中判斷某個條件不等于用<>
SELECT * FROMstudent WHERE age <> 20 ;2)where后面跟多個條件,并列條件或者或關系的條件
a.并列條件
語法1:可以使用邏輯運算符&&
需求:查詢學生年齡在20歲到30歲的學生所以信息
SELECT* FROMstudent WHEREage>=20 && age<=30;語法2:在mysql中多個并列條件,推薦使用關鍵字and
where 字段名稱1 條件1 and 字段名稱2 條件2
SELECT* FROMstudent WHEREage>=20 AND age<=30;語法3:還可以使用between? and
where 字段名稱 between 值1 and 值2; 等價于 字段名稱>=值1 and 字段名稱<=值2;
SELECT* FROMstudent WHEREageBETWEEN 20 AND 30;結果都是
b.或的關系
語法1:可以使用邏輯運算符||
需求:查詢學生年齡是18歲或者20歲或者45歲的學生所有信息
SELECT* FROMstudent WHEREage=18 || age=20 || age=45;語法2:在mysql中多個或的關系哦,推薦使用關鍵字or
SELECT* FROMstudent WHEREage=18OR age=20OR age=45;語法3:還可以使用in集合語句
where 字段名稱 in(值1,值2,值3,...);
?
結果都為
?3)where條件后面可以跟某個字段為null的格式
語法1:where 字段名稱 is null
SELECTid '編號',NAME '學生姓名',sex '學生性別',address '地址',math '數學成績',english '英語成績' FROMstudent WHEREenglish IS NULL;?語法2:where 字段名稱 is not null
SELECTid '編號',NAME '學生姓名',sex '學生性別',address '地址',math '數學成績',english '英語成績' FROMstudent WHEREenglish IS NOT NULL;?5.模糊查詢
關鍵字:like
1 )匹配任意字符:%
語法:select 指定字段列表 from 表名 where like '%字符%'
需求:模糊查詢姓柳的學生所有信息
?
?2 )一個下劃線代表一個任意字符值:_
需求:查詢姓名是兩個字符的學生的信息
語法:where 字段名稱 like '_幾個字符就是幾個下劃線_';
SELECT* FROMstudent WHERENAMELIKE '__';%和_ 兩個可以結合使用
需求:模糊查詢學生姓名第二個字為悟的學生信息
SELECT* FROMstudent WHERENAME LIKE '%_悟%';??
?6.聚合函數查詢
針對單行單列的函數
語法:select 聚合函數(字段名稱) from 表名;
1)常見的聚合函數
a.查詢當前表的記錄:count(字段名稱)
SELECTCOUNT(english) AS '總記錄數' FROMstudent;?
由于english中含有null所以總的記錄為7,但實際上應該是8,需要使用ifnull(字段名稱,期望值);
SELECTCOUNT(IFNULL(english,0)) AS '總記錄數' FROMstudent;?
?通用的方法是用非業務字段id進行查詢
SELECTCOUNT(id) AS '總記錄數' FROMstudent;?
b.針對某列字段值求和(整數):sum(字段名稱)
需求:查詢數學成績總和
SELECTSUM(math) AS '數學總成績' FROMstudent;??
?c.平均分:avg(字段名稱)
需求:查詢數學成績平均分
SELECTAVG(math) AS '數學成績平均分' FROMstudent;?
d.最高分:max(字段名稱)
? ?最低分:min(字段名稱)
SELECTMAX(math) AS '數學最高分',MIN(math) AS '數學最低分' FROMstudent;??
7.復雜查詢和聚合查詢一起使用
語法:where 字段名稱 比較運算符(select 復合函數查詢)
?需求:查詢出數學成績大于平均分的學生信息
SELECT* FROMstudent WHEREmath>(SELECT AVG(math) FROM student);8.排序查詢
關鍵字:order by
1)單個字段排序
語法:語法:select 字段列表 from 表名 order by 字段名稱 排序規則
?排序規則:
? ? ? ? 升序(默認值):asc
? ? ? ? 降序;desc
需求:數學成績升序排序,查詢所有信息
SELECT * FROM student ORDER BY math ASC; -- math后面如果沒有帶排序條件,默認就是升序?需求:將英語成績降序排序查詢所有信息
SELECT* FROMstudent ORDER BYenglish DESC;?2)多個字段排序
?語法:select 字段列表 from 表名 order by 字段名稱1 排序規則1 ,字段名稱2 排序規則2 ;
?需求:查詢數學成績降序,英語成績是升序的所有學生信息
?如果數學成績相同,按照英語成績排序規則進行操作
?如果英語成績有null,按照數學排序規則進行操作
SELECT* FROM student3 ORDER BY math DESC ,english ASC ;9.homework
創建庫
-- 創建庫 CREATE DATABASE mysql_01;選擇庫
-- 選擇庫 USE mysql_01;創建表
-- 創建表 CREATE TABLE student(id INT, -- id編號NAME VARCHAR(20), -- 姓名chinese INT, -- 語文english INT, -- 英語math INT -- 數學 );插入數據
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90); INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金蓮',67,53,95); INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'鳳姐',87,78,77); INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺財',88,98,92); INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67); INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黃',55,85,45); INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30);1)查詢表中所有學生的信息。
SELECT* FROMstudent;?
?2)查詢表中所有學生的姓名和英語成績
SELECTNAME,english '英語成績' FROMstudent;?
? 3)過濾表中重復數據。(去重的關鍵字 distinct)
SELECTDISTINCT chinese,english,math FROMstudent;?
?4)統計每個學生的總分
SELECTid '學生編號',NAME '學生姓名',(chinese+english+math) '總分' FROMstudent;?
?5)在所有學生總分數上加10分特長分。
SELECTid '學生編號',NAME '學生姓名',(chinese+english+math+10) '總分+10分特長分' FROMstudent;?
?6)使用別名表示學生分數。
SELECTid '學生編號',NAME '學生姓名',chinese '語文成績',english '英語成績',math '數學成績' FROMstudent;?
?7)查詢姓名為行哥的學生成績
SELECT* FROMstudent WHERENAME='行哥';?
??8)查詢英語成績大于90分的同學
SELECT* FROMstudent WHEREenglish>90;?
??9)查詢總分大于200分的所有同學
SELECTid,NAME,chinese,english,math,(chinese+english+math) '總分' FROMstudent WHERE(chinese+english+math)>200;?
?10)查詢英語分數在 80~90之間的同學。
SELECT* FROMstudent WHEREenglishBETWEEN 80AND 90;?
?11)查詢數學分數為89,90,91的同學。
SELECT* FROMstudent WHEREmathIN(89,90,91);?
?12)查詢所有姓白的學生英語成績。
SELECTNAME,english FROMstudent WHERENAME LIKE '%白%';?
?13) 查詢數學分>80并且語文分>80的同學
SELECT* FROMstudent WHEREmath>80 AND chinese>80;?
?14)查詢英語>80或者總分>200的同學
SELECTid,NAME,chinese,english,math,(chinese+english+math) '總分' FROMstudent WHEREenglish>80OR(chinese+english+math)>200;?
?15)對數學成績升序排序
SELECT* FROMstudent ORDER BYmath ASC;?
?16)對總分降序排序,然后再按數學從高到低的順序輸出
SELECTid,NAME,chinese,english,math,(chinese+english+math) AS '總分' FROMstudent ORDER BY(chinese+english+math) DESC,math DESC;?
?17)對姓白的學生成績排序輸出(排序規則自己定義)總分升序
SELECTid,NAME,chinese,english,math,(chinese+english+math) AS '總分' FROMstudent WHERENAME LIKE '白%' ORDER BY(chinese+english+math) ASC;??
?18)查詢數學成績大于等于平均分的所有學生信息
SELECT* FROMstudent WHEREmath>(SELECT AVG(math) FROM student);??
??19)查詢出英語成績最高分的學生信息
SELECT* FROMstudent WHEREenglish=(SELECT MAX(english) FROM student);??
?20)模糊查詢出學生姓名中第二個字是金的學生信息
SELECT* FROMstudent WHERE NAME LIKE '_金%';??
?21)查詢出英語成績平均分是多少
SELECTAVG(english) '英語平均分' FROMstudent;??
22)查詢出數學總分是多少
SELECTSUM(math) '數學總分' FROMstudent;??
23)查詢學生表中有多少記錄
SELECTCOUNT(id) AS '學生表總記錄' FROMstudent;??
全部代碼:
-- 創建庫 CREATE DATABASE mysql_01; -- 選擇庫 USE mysql_01; -- 創建表 CREATE TABLE student(id INT, -- id編號NAME VARCHAR(20), -- 姓名chinese INT, -- 語文english INT, -- 英語math INT -- 數學 ); -- 查看表數據 SELECT* FROMstudent; -- 插入數據 INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90); INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金蓮',67,53,95); INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'鳳姐',87,78,77); INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺財',88,98,92); INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67); INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黃',55,85,45); INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30); -- 1.查詢表中所有學生的信息。 SELECT* FROMstudent; -- 2.查詢表中所有學生的姓名和英語成績。 SELECTNAME,english '英語成績' FROMstudent; -- 3.過濾表中重復數據。(去重的關鍵字 distinct) -- 過濾語文重復數據 SELECTDISTINCT chinese,english,math FROMstudent; -- 過濾英語重復數據 SELECTDISTINCT english FROMstudent; -- 過濾數學重復數據 SELECTDISTINCT math FROMstudent; -- 4.統計每個學生的總分SELECTid '學生編號',NAME '學生姓名',(chinese+english+math) '總分' FROMstudent; -- 5..在所有學生總分數上加10分特長分。SELECTid '學生編號',NAME '學生姓名',(chinese+english+math+10) '總分+10分特長分' FROMstudent; -- 6.使用別名表示學生分數。 SELECTid '學生編號',NAME '學生姓名',chinese '語文成績',english '英語成績',math '數學成績' FROMstudent; -- 7.查詢姓名為行哥的學生成績 SELECT* FROMstudent WHERENAME='行哥'; -- 8.查詢英語成績大于90分的同學 SELECT* FROMstudent WHEREenglish>90; -- 9.查詢總分大于200分的所有同學 SELECTid,NAME,chinese,english,math,(chinese+english+math) '總分' FROMstudent WHERE(chinese+english+math)>200; -- 10.查詢英語分數在 80-90之間的同學。 SELECT* FROMstudent WHEREenglishBETWEEN 80AND 90; -- 11.查詢數學分數為89,90,91的同學。 SELECT* FROMstudent WHEREmathIN(89,90,91); -- 12.查詢所有姓白的學生英語成績。 SELECTNAME,english FROMstudent WHERENAME LIKE '%白%'; -- 13. 查詢數學分>80并且語文分>80的同學 SELECT* FROMstudent WHEREmath>80 AND chinese>80; -- 14.查詢英語>80或者總分>200的同學 SELECTid,NAME,chinese,english,math,(chinese+english+math) '總分' FROMstudent WHEREenglish>80OR(chinese+english+math)>200; -- 15.對數學成績升序排序 SELECT* FROMstudent ORDER BYmath ASC; -- 16.對總分降序排序,然后再按數學從高到低的順序輸出 SELECTid,NAME,chinese,english,math,(chinese+english+math) AS '總分' FROMstudent ORDER BY(chinese+english+math) DESC,math DESC; -- 17.對姓白的學生成績排序輸出(排序規則自己定義)總分升序 SELECTid,NAME,chinese,english,math,(chinese+english+math) AS '總分' FROMstudent WHERENAME LIKE '白%' ORDER BY(chinese+english+math) ASC; -- 18.查詢數學成績大于等于平均分的所有學生信息 SELECT* FROMstudent WHEREmath>(SELECT AVG(math) FROM student); -- 19.查詢出英語成績最高分的學生信息 SELECT* FROMstudent WHEREenglish=(SELECT MAX(english) FROM student); -- 20.模糊查詢出學生姓名中第二個字是金的學生信息 SELECT* FROMstudent WHERE NAME LIKE '_金%'; -- 21.查詢出英語成績平均分是多少 SELECTAVG(english) '英語平均分' FROMstudent; -- 22.查詢出數學總分是多少 SELECTSUM(math) '數學總分' FROMstudent; -- 23.查詢學生表中有多少記錄 SELECTCOUNT(id) AS '學生表總記錄' FROMstudent;總結
以上是生活随笔為你收集整理的DQL:数据库查询语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TT盒子种子搜索神器
- 下一篇: Page Life Expectancy