国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL 使用DQL命令查詢數據的實現方法

2020-01-18 20:44:29
字體:
來源:轉載
供稿:網友

本篇文章博主將帶大家一起學習MySQL中常用的數據查詢語言。

DQL(Data Query Language 數據查詢語言)

SELECT 語法

SELECT [ALL | DISTINCT]{ * | table.* | [table.field1 [as alias1][,table.field2] [as alias2][,...]]}FROM table_name [as table_alias][left | out | inner join table_name2] #聯合查詢[WHERE ...]   #指定結果需要滿足的條件[GROUP BY ...]   #指定結果按照哪幾個字段來分組[HAVING ...]   #過濾分組的記錄必須滿足的次要條件[ODER BY ...]   #指定查詢記錄按一個或者多個條件排序[LIMIT [偏移量,返回結果記錄數]; #指定查詢的記錄從哪條至哪條

基本查詢語句&AS

以下例子用student表中的數據。

查詢表中所有數據列結果,采用 “*” 符號,效率低

select * from student;

可指定查詢列,效率高

select StudentName,Phone from student;

 AS 子句的作用和用法

注意:AS 可省略不寫

(1)可給數據列取一個新別名  

select StudentName as '學生姓名' from student;

(2)給表取別名

select stu.address from student as stu;

(3)可把計算或總結的結果用另一個新名稱來代替

SELECT Phone +1 AS Tel FROM student;

DISTINCT 關鍵字

作用:去掉SELECT查詢出來的重復值(當所有返回值都相同時,只返回一條記錄)

語法:

SELECT DISTINCT 字段名1,字段名2,... from 表名

注意:ALL 關鍵字是默認的,返回所有記錄,與之相反

當過濾多列重復值時,只有當選擇過濾的列都存在重復值才進行過濾

SELECT DISTINCT StudentNo,address from student;

過濾單列:查詢學生表中的地址

SELECT DISTINCT address from student;

SQL語句中的表達式

SELECT VERSION(),100*3 as 乘積; #返回Mysql 版本和計算結果 SELECT NOW() '當前時間'; #返回當前時間

避免SQL返回結果中包含“.” ,“*”,和括號等干擾開發語言程序

SELECT VERSION() as MySQL_V,12.3*100 as expression;#返回結果不會與后臺開發程序發生混淆

拼接 CONCAT

SELECT CONCAT(studentName,'@.com') as Email from student;

數值類型相加

select StudentNo+100 from student;

比較運算符&通配符

where條件語句:用于檢索數據表中符合條件的記錄

搜索條件可以由一個或多個邏輯表達式組成,結果一般為真或假

搜索條件的組成:邏輯操作符、比較操作符

#where 條件語句select * from student where address='四川'; #查詢學生表中電話號碼不為空的學員姓名select StudentName from student where Phone is not null; #查詢學生表中電話號碼為空的學員姓名select StudentName from student where Phone is null; #查詢剛刪掉的數據――空值select StudentName from student where Phone = ''; # BETWEEN AND 適用于時間范圍

邏輯操作符

比較操作符

使用 LIKE 關鍵字進行模糊查詢

  • 與“%”一起使用,表示匹配0個或任意個字符
  • 與“_”一起使用 表示匹配單個字符
#查詢學生表中姓張*的學生姓名SELECT StudentName from student where studentname like '張_'; SELECT StudentName from student where studentname like '%麗%';# INSELECT * from student where Address in ('四川','上海');

注意:

  • 數值數據類型的記錄之間才能進行算數運算
  • 相同的數據類型的數據之間才能進行比較

NULL

  • null 代表“無值”
  • 區別于零值0和空字符串“ ”
  • 只能出現在定義允許為NULL的字段
  • 須使用 IS NULL 或 IS NOT NULL 比較操作符去比較

內連接&自查詢

如果需要多張數據表的數據進行查詢,則可以通過連接運算符實現多個查詢。

分類包括:

  • 內連接(inner  jion):
    • 等值和非等值的連接查詢
    • 自身連接查詢
  • 外連接(out  jion)
    • 左連接(LEFT JION)
    • 右連接(RIGHT JION)

ORDER BY 排序查詢

對select 語句查詢得到的結果,按某些字段進行排序

與DESC(降序)或ASC(升序)搭配使用,默認為ASC

以subject表和grade表數據為例:

SELECT * from subject ORDER BY classhour; #升序SELECT * from subject ORDER BY classhour desc; #降序

多字段排序:先按照第一個字段排序,再按照第二個字段排序。如果第一個字段數據相同,再按照第二個字段排序。

SELECT * from subject ORDER BY classHour,GradeID;

LIMIT分頁

LIMIT   [m,] n  或  LIMIT  n  OFFSET  m

限制SELECT返回結果的行數

m為第一個返回記錄行的偏移量

n返回記錄行的數目

注意:

  • m不指定,則偏移量為0,從第一條開始返回前n條記錄
  • LIMIT 常用于分頁顯示
  • 如果超出表中數據,則顯示全部

例如:

SELECT * FROM grade LIMIT 3; #返回前3條記錄SELECT * FROM grade LIMIT 1,3; #返回2~4條記錄

 總記錄數:total

SELECT COUNT(subjectNO) '總數據' from subject;

總頁數:int  totalPage = total % pagesize ==0 ? total / pagesize : total  / pagesize  + 1

子查詢

在查詢語句WHERE 條件子句中,又嵌套了另外一個查詢語句

注意:子查詢返回的結果一般是集合,建議使用IN關鍵字

SELECT subjectName from subjectwhere gradeID IN(SELECT GradeID from grade);

聚合函數

常用的統計函數:COUNT()、SUM()、AVG()、MAX()、MIN()

SELECT COUNT(StudentNo) '總數據' FROM student;SELECT sum(classHour) '總學時'from subject;SELECT AVG(classHour) '平均學時' FROM subject;SELECT MAX(classHour) '最長學時' FROM subject;SELECT MIN(classHour) '最短學時' FROM subject;

分組 GROUP BY

使用 GROUP BY 關鍵字對查詢結果分組

  • 對所有的數據進行分組統計
  • 分組的字段可以有多個,并依次分組
  • 與 HAVING 結合使用,進行分組后的數據篩選

以 student 表為例

(1)對student 表按照地址分組統計  group by

SELECT Address,COUNT(Address) FROM student GROUP BY Address;

HAVING 過濾分組的記錄必須滿足的次要條件

(2)對 student 表 按照地址分組,滿足地址=1的 HAVING

SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1;

合并 UNION 、UNION

  •  ALLUNION #合并完全相同數據
  • UNION ALL     #合并所有數據

注意:合并兩張表時,列數必須一樣才能合并。

兩表列數不同時,會報以下錯誤:

     [SQL]SELECT * FROM grade UNION SELECT * FROM student;
     [Err] 1222 - The used SELECT statements have a different number of columns

(1)合并 subject 表和 student表

SELECT * FROM subject UNION SELECT * FROM student;  SELECT * FROM subject UNION ALL SELECT * FROM student;

子查詢   EXISTS ――>true  false

EXISTS  / NOT EXISTS 子查詢條件成立則顯示父查詢的結果,否則不顯示結果

(1)子查詢條件為真 (grade 表中 gradeid 1~5,存在 1)

SELECT subjectName,GradeID FROM subjectWHERE EXISTS (SELECT * FROM grade WHERE GradeID=1);

SELECT subjectName,GradeID FROM subjectWHERE NOT EXISTS (SELECT * FROM grade WHERE GradeID=999);

(2)子查詢條件為假  (grade 表中 gradeid 1~5,不存在 999)

SELECT subjectName,GradeID FROM subjectWHERE EXISTS (SELECT * FROM grade WHERE GradeID=999);

SELECT subjectName,GradeID FROM subjectWHERE NOT EXISTS (SELECT * FROM grade WHERE GradeID=1);

子查詢(any & all)

ANY :判斷條件中,若子查詢中任意一個值滿足條件,則執行父查詢
ALL :判斷條件中,若子查詢中所有值滿足條件,則執行父查詢
 (1)滿足條件:存在 subject.gradeid >= grade.gradeid ,執行父查詢 

SELECT subjectname,gradeid FROM subject WHERE GradeID >=ANY(SELECT GradeID FROM grade);

(2)不滿足條件:所有subject.gradeid >= grade.gradeid ,不執行父查詢 

SELECT subjectname,gradeid FROM subject WHERE GradeID >=ALL(SELECT GradeID FROM grade);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特右旗| 托克逊县| 海南省| 福建省| 应城市| 弋阳县| 长武县| 招远市| 富顺县| 奉化市| 环江| 汶川县| 宣汉县| 晋江市| 马龙县| 三江| 五河县| 大竹县| 石棉县| 镇平县| 新乡市| 岳西县| 石楼县| 昭觉县| 炉霍县| 上高县| 阳原县| 沽源县| 政和县| 澄迈县| 托克逊县| 江城| 突泉县| 台前县| 镇雄县| 望城县| 信阳市| 扎鲁特旗| 油尖旺区| 福泉市| 兴和县|