mysql數據庫(三):查詢的其他用法
一. 查詢—IN的用法
語法:select ... from 表名 where 字段 a in (值b, 值c, 值d...)
等價於 select ... from 表名 where 字段a=值b or 字段a=值c or 字段a=值d;
例如,查詢學生表裏學生編號為1401001或者1401002或者1401003的學生信息
select * from student where id=1401001 or id=1401002 or id=1401003;
select * from student where id in(1401001, 1401002, 1401003);
二. 查詢—模糊查詢(LIKE)
語法:select <字段1, 字段2, ...> from <表名> where <字段名> like ‘%值a%‘;
示例:
查詢學生表中姓名中有"小"的學生信息
分析問題:
-
涉及表:學生表
-
要顯示的字段:學生表中所有字段
-
條件:學生姓名中有"小"字
-
編寫如下sql:
select * from student where name like ‘%小%‘;
註意:
%在不同位置所代表的意義 %值 值% %值%
%A:以任意字符開頭,以A結尾的字符串
A%:以A開頭,以任意字符結尾的字符串
%A%:包含了A的任意字符串
練習:
1. 查詢科目表中,科目名稱有"語"的科目信息
三. 查詢—統計(COUNT(*))
關鍵詞:count(*)
語法:select count(*) from <表名> where 條件表達式;
1. 統計一個表裏總共有多少條記錄
舉例:查詢學生表總共有多少學生
select count(*) from student;
2. 統計滿足某一條件的記錄數
舉例:查詢學生表的女生數量
select count(*) from student where sex=‘女‘;
3. 統計高一年級下共有多少學生
select count(*) from grade t1, class t2, student t3 where t3.class_id = t2.id and t2.grade_id=t1.id and t1.id=(select id from grade where name=‘高一年級‘);
select count(*) from student where class_id in (select t1.id from class t1, grade t2 where t1.grade_id=t2.id and t2.name=‘高一年級‘);
select count(*) from grade t1, class t2, student t3 where t3.class.class_id=t2.id and t2.grade_id=t1.id and t1.name=‘高一年級‘;
四. 查詢—分組(GROUP BY)
根據一個或多個列對結果集進行分組
語法:select 字段1, 字段2, 統計函數xx() from <表名> group by 字段1, 字段2
select
示例:請按性別分組,統計學生表裏男生和女生各有多少人
分析:
涉及表:student
查詢字段:sex, count(*)
selct sex, count(*) from student group by sex;
五. MySQL—BETWEEN的用法
找出score表成績在80和90之間的學生(包含邊界值80和90)
select * from score where score between 80 and 90;
六. MySQL分頁
語法:limit m,n;
m指的索引值是從m開始,n表示每頁要取多少條
假如每頁取十條展示,則第一頁為:limit 0,10表示取索引從0開始取10條記錄,第二頁為:limit 10,10 表示取索引從10開始取10條記錄,第三頁為:limit 20,10 表示索引從20開始取10條記錄
1) 請用sql查詢出student表的前10條記錄
2) 請用sql查出student表的第10到15條記錄
七. 常見MySQL函數
舉例mysql中常用的sql函數:
數值相關函數:
求字段A的最小值:min(字段A)
求字段A的最大值:max(字段A)
求字段A的平均值:avg(字段A)
求字段A的和:sum(字段A)
日期函數:
獲取系統當前日期時間:sysdate()
獲取系統當前日期:curdate()
獲取系統當前時間:curtime()
獲取date是一個月的第幾天:dayofmonth(date)
獲取當前月的最後一天:last_day(date)
為日期增加一個時間間隔:DATE_ADD(date, INTERVAL expr unit),例如在當前日期上加一天:select DATE_ADD(CURDATE(), INTERVAL 1 day);
獲取當前月第一天:select date_add(curdate(), interval -day(curdate())+1 day);
字符串函數:
字符串拼接函數:concat(字段A, 字段B), SUBSTR(字段A, 截取開始的位置,截取字符個數), length(字段A)
八. 課後作業
1. 查詢出"高一年級"下面的所有班級裏面的男學生信息;
select t3.* from grade t1,class t2,student t3 where t1.id=t2.grade_id and t2.id=t3.class_id and t1.name=‘高一年級‘ and t3.sex=‘男‘;
2. 查詢成績小於等於90分的學生姓名、性別、科目名稱、分數(涉及表student、course、score)
select t1.name,t1.sex,t2.name,t3.score from student t1,course t2,score t3 where t1.id=t3.student_id and t2.id=t3.course_id and t3.score between 0 and 90;
3. 查詢高二年級下所有數學成績小於90分的同學的學號和姓名以及分數
九. 常見面試題
1. 圖書(圖書號,圖書名,作者編號,出版社,出版日期) 作者(作者姓名,作者編號,年齡,性別) 用SQL語句查詢年齡小於平均年齡的作者姓名、圖書名、出版社
2. 作者表:authors
作者編號:authorId int(11)
作者姓名:authorName varchar(50)
性別:sex varchar(2)
年齡:age int
居住城市:city varchar(50)
聯系電話:telephone varchar(11)
銷量:sales int(11)
最新出版日期:jsbn datetime
1) 查詢姓張的作者信息
2) 查詢聯系電話第三位為8,9並以888結尾的作者信息
3) 查詢年齡在20-50之間的男性作者信息
4) 查詢顯示作者姓名的第二個字符
5) 查詢顯示作者姓名的長度
6) 查詢顯示最年輕的5位作者的平均銷量
7) 查詢顯示作者的姓名,出生年份,銷量,並按銷量降序排列
8) 查詢顯示最新出版日期在今年前半年的作者信息
mysql數據庫(三):查詢的其他用法