久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么使用DQL查詢數(shù)據(jù)

共計(jì) 8790 個(gè)字符,預(yù)計(jì)需要花費(fèi) 22 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

這篇文章將為大家詳細(xì)講解有關(guān)怎么使用 DQL 查詢數(shù)據(jù),丸趣 TV 小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

使用 DQL 查詢數(shù)據(jù)

DQL 語(yǔ)言

DQL(Data Query Language 數(shù)據(jù)查詢語(yǔ)言)

查詢數(shù)據(jù)庫(kù)數(shù)據(jù) , 如 SELECT 語(yǔ)句

簡(jiǎn)單的單表查詢或多表的復(fù)雜查詢和嵌套查詢

是數(shù)據(jù)庫(kù)語(yǔ)言中最核心, 最重要的語(yǔ)句

使用頻率最高的語(yǔ)句

SELECT 語(yǔ)法

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
 [left | right | inner join table_name2] --  聯(lián)合查詢
 [WHERE ...] --  指定結(jié)果需滿足的條件
 [GROUP BY ...] --  指定結(jié)果按照哪幾個(gè)字段來(lái)分組
 [HAVING] --  過(guò)濾分組的記錄必須滿足的次要條件
 [ORDER BY ...] --  指定查詢記錄按一個(gè)或多個(gè)條件排序
 [LIMIT {[offset,]row_count | row_countOFFSET offset}];
 --  指定查詢的記錄從哪條至哪條 

注意 : [] 括號(hào)代表可選的 , {} 括號(hào)代表必選得

指定查詢字段

--  查詢表中所有的數(shù)據(jù)列結(jié)果  ,  采用  **  \*  **  符號(hào);  但是效率低,不推薦  .
--  查詢所有學(xué)生信息
SELECT * FROM student;
--  查詢指定列 (學(xué)號(hào)  ,  姓名)
SELECT studentno,studentname FROM student;

AS 子句作為別名

作用:

可給數(shù)據(jù)列取一個(gè)新別名

可給表取一個(gè)新別名

可把經(jīng)計(jì)算或總結(jié)的結(jié)果用另一個(gè)新名稱來(lái)代替

--  這里是為列取別名 (當(dāng)然 as 關(guān)鍵詞可以省略)
SELECT studentno AS  學(xué)號(hào),studentname AS  姓名  FROM student;
--  使用 as 也可以為表取別名
SELECT studentno AS  學(xué)號(hào),studentname AS  姓名  FROM student AS s;
--  使用 as, 為查詢結(jié)果取一個(gè)新名字
-- CONCAT() 函數(shù)拼接字符串
SELECT CONCAT(姓名: ,studentname) AS  新姓名  FROM student;

DISTINCT 關(guān)鍵字的使用

作用 : 去掉 SELECT 查詢返回的記錄結(jié)果中重復(fù)的記錄 (返回所有列的值都相同) , 只返回一條

-- #  查看哪些同學(xué)參加了考試 (學(xué)號(hào))  去除重復(fù)項(xiàng)
SELECT * FROM result; --  查看考試成績(jī)
SELECT studentno FROM result; --  查看哪些同學(xué)參加了考試
SELECT DISTINCT studentno FROM result; --  了解:DISTINCT  去除重復(fù)項(xiàng)  , (默認(rèn)是 ALL)

使用表達(dá)式的列

數(shù)據(jù)庫(kù)中的表達(dá)式 : 一般由文本值 , 列值 , NULL , 函數(shù)和操作符等組成

應(yīng)用場(chǎng)景 :

SELECT 語(yǔ)句返回結(jié)果列中使用

SELECT 語(yǔ)句中的 ORDER BY , HAVING 等子句中使用

DML 語(yǔ)句中的 where 條件語(yǔ)句中使用表達(dá)式

-- selcet 查詢中可以使用表達(dá)式
SELECT @@auto_increment_increment; --  查詢自增步長(zhǎng)
SELECT VERSION(); --  查詢版本號(hào)
SELECT 100*3-1 AS  計(jì)算結(jié)果; --  表達(dá)式
--  學(xué)員考試成績(jī)集體提分一分查看
SELECT studentno,StudentResult+1 AS  提分后  FROM result;

避免 SQL 返回結(jié)果中包含 . , * 和括號(hào)等干擾開發(fā)語(yǔ)言程序.

where 條件語(yǔ)句

作用:用于檢索數(shù)據(jù)表中 符合條件 的記錄

搜索條件可由一個(gè)或多個(gè)邏輯表達(dá)式組成 , 結(jié)果一般為真或假.

邏輯操作符

怎么使用 DQL 查詢數(shù)據(jù)

測(cè)試

--  滿足條件的查詢 (where)
SELECT Studentno,StudentResult FROM result;
--  查詢考試成績(jī)?cè)?95-100 之間的
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult =95 AND StudentResult =100;
-- AND 也可以寫成   
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult =95   StudentResult =100;
--  模糊查詢 (對(duì)應(yīng)的詞: 精確查詢)
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult BETWEEN 95 AND 100;
--  除了 1000 號(hào)同學(xué), 要其他同學(xué)的成績(jī)
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;
--  使用 NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;

模糊查詢:比較操作符

怎么使用 DQL 查詢數(shù)據(jù)

注意:

數(shù)值數(shù)據(jù)類型的記錄之間才能進(jìn)行算術(shù)運(yùn)算 ;

相同數(shù)據(jù)類型的數(shù)據(jù)之間才能進(jìn)行比較 ;

測(cè)試:

--  模糊查詢  between and \ like \ in \ null
-- =============================================
-- LIKE
-- =============================================
--  查詢姓劉的同學(xué)的學(xué)號(hào)及姓名
-- like 結(jié)合使用的通配符  : % (代表 0 到任意個(gè)字符) _ (一個(gè)字符)
SELECT studentno,studentname FROM student
WHERE studentname LIKE  劉 % 
--  查詢姓劉的同學(xué), 后面只有一個(gè)字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE  劉_ 
--  查詢姓劉的同學(xué), 后面只有兩個(gè)字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE  劉__ 
--  查詢姓名中含有   嘉   字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE  % 嘉 % 
--  查詢姓名中含有特殊字符的需要使用轉(zhuǎn)義符號(hào)   \ 
--  自定義轉(zhuǎn)義符關(guān)鍵字: ESCAPE  : 
-- =============================================
-- IN
-- =============================================
--  查詢學(xué)號(hào)為 1000,1001,1002 的學(xué)生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);
--  查詢地址在北京, 南京, 河南洛陽(yáng)的學(xué)生
SELECT studentno,studentname,address FROM student
WHERE address IN ( 北京 , 南京 , 河南洛陽(yáng) 
-- =============================================
-- NULL  空
-- =============================================
--  查詢出生日期沒有填寫的同學(xué)
--  不能直接寫 =NULL ,  這是代表錯(cuò)誤的  ,  用  is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
--  查詢出生日期填寫的同學(xué)
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
--  查詢沒有寫家庭住址的同學(xué) (空字符串不等于 null)
SELECT studentname FROM student
WHERE Address=  OR Address IS NULL;

連接查詢

JOIN 對(duì)比

怎么使用 DQL 查詢數(shù)據(jù)

七種 Join:

怎么使用 DQL 查詢數(shù)據(jù)

測(cè)試

/*
  如需要多張數(shù)據(jù)表的數(shù)據(jù)進(jìn)行查詢, 則可通過(guò)連接運(yùn)算符實(shí)現(xiàn)多個(gè)查詢
內(nèi)連接  inner join
  查詢兩個(gè)表中的結(jié)果集中的交集
外連接  outer join
  左外連接  left join
 (以左表作為基準(zhǔn), 右邊表來(lái)一一匹配, 匹配不上的, 返回左表的記錄, 右表以 NULL 填充)
  右外連接  right join
 (以右表作為基準(zhǔn), 左邊表來(lái)一一匹配, 匹配不上的, 返回右表的記錄, 左表以 NULL 填充)
 
等值連接和非等值連接
--  查詢參加了考試的同學(xué)信息 (學(xué)號(hào), 學(xué)生姓名, 科目編號(hào), 分?jǐn)?shù))
SELECT * FROM student;
SELECT * FROM result;
/* 思路:
(1): 分析需求, 確定查詢的列來(lái)源于兩個(gè)類,student result, 連接查詢
(2): 確定使用哪種連接查詢?(內(nèi)連接)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
--  右連接 (也可實(shí)現(xiàn))
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
--  等值連接
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s , result r
WHERE r.studentno = s.studentno
--  左連接  (查詢了所有同學(xué), 不考試的也會(huì)查出來(lái))
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
--  查一下缺考的同學(xué) (左連接應(yīng)用場(chǎng)景)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
WHERE StudentResult IS NULL
--  思考題: 查詢參加了考試的同學(xué)信息 (學(xué)號(hào), 學(xué)生姓名, 科目名, 分?jǐn)?shù))
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON sub.subjectno = r.subjectno

自連接

/*
  數(shù)據(jù)表與自身進(jìn)行連接
需求: 從一個(gè)包含欄目 ID ,  欄目名稱和父欄目 ID 的表中
  查詢父欄目名稱和其他子欄目名稱
--  創(chuàng)建一個(gè)表
CREATE TABLE `category` ( `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT  主題 id ,
 `pid` INT(10) NOT NULL COMMENT  父 id ,
 `categoryName` VARCHAR(50) NOT NULL COMMENT  主題名字 ,
 PRIMARY KEY (`categoryid`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
--  插入數(shù)據(jù)
INSERT INTO `category` (`categoryid`, `pid`, `categoryName`)
VALUES(2 , 1 , 信息技術(shù)),
(3 , 1 , 軟件開發(fā)),
(4 , 3 , 數(shù)據(jù)庫(kù)),
(5 , 1 , 美術(shù)設(shè)計(jì)),
(6 , 3 , web 開發(fā)),
(7 , 5 , ps 技術(shù)),
( 8 , 2 , 辦公信息 
--  編寫 SQL 語(yǔ)句, 將欄目的父子關(guān)系呈現(xiàn)出來(lái)  (父欄目名稱, 子欄目名稱)
--  核心思想: 把一張表看成兩張一模一樣的表, 然后將這兩張表連接查詢 (自連接)
SELECT a.categoryName AS  父欄目 ,b.categoryName AS  子欄目 
FROM category AS a,category AS b
WHERE a.`categoryid`=b.`pid`
--  思考題: 查詢參加了考試的同學(xué)信息 (學(xué)號(hào), 學(xué)生姓名, 科目名, 分?jǐn)?shù))
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON sub.subjectno = r.subjectno
--  查詢學(xué)員及所屬的年級(jí) (學(xué)號(hào), 學(xué)生姓名, 年級(jí)名)
SELECT studentno AS  學(xué)號(hào),studentname AS  學(xué)生姓名,gradename AS  年級(jí)名稱
FROM student s
INNER JOIN grade g
ON s.`GradeId` = g.`GradeID`
--  查詢科目及所屬的年級(jí) (科目名稱, 年級(jí)名稱)
SELECT subjectname AS  科目名稱,gradename AS  年級(jí)名稱
FROM SUBJECT sub
INNER JOIN grade g
ON sub.gradeid = g.gradeid
--  查詢   數(shù)據(jù)庫(kù)結(jié)構(gòu) -1  的所有考試結(jié)果 (學(xué)號(hào)   學(xué)生姓名   科目名稱   成績(jī))
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname= 數(shù)據(jù)庫(kù)結(jié)構(gòu) -1

排序和分頁(yè)

測(cè)試

/*==============  排序  ================
語(yǔ)法  : ORDER BY
 ORDER BY  語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。 ORDER BY  語(yǔ)句默認(rèn)按照 ASC 升序?qū)τ涗涍M(jìn)行排序。  如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用  DESC  關(guān)鍵字。 
--  查詢   數(shù)據(jù)庫(kù)結(jié)構(gòu) -1  的所有考試結(jié)果 (學(xué)號(hào)   學(xué)生姓名   科目名稱   成績(jī))
--  按成績(jī)降序排序
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname= 數(shù)據(jù)庫(kù)結(jié)構(gòu) -1 
ORDER BY StudentResult DESC
/*==============  分頁(yè)  ================
語(yǔ)法  : SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
好處  : (用戶體驗(yàn), 網(wǎng)絡(luò)傳輸, 查詢壓力)
  第一頁(yè)  : limit 0,5
  第二頁(yè)  : limit 5,5
  第三頁(yè)  : limit 10,5
 ......
  第 N 頁(yè)  : limit (pageNo-1)*pageSzie,pageSzie
 [pageNo: 頁(yè)碼,pageSize: 單頁(yè)面顯示條數(shù)]
 
--  每頁(yè)顯示 5 條數(shù)據(jù)
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname= 數(shù)據(jù)庫(kù)結(jié)構(gòu) -1 
ORDER BY StudentResult DESC , studentno
LIMIT 0,5
--  查詢  JAVA 第一學(xué)年   課程成績(jī)前 10 名并且分?jǐn)?shù)大于 80 的學(xué)生信息 (學(xué)號(hào), 姓名, 課程名, 分?jǐn)?shù))
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname= JAVA 第一學(xué)年 
ORDER BY StudentResult DESC
LIMIT 0,10

子查詢

/*==============  子查詢  ================
什么是子查詢?
  在查詢語(yǔ)句中的 WHERE 條件子句中, 又嵌套了另一個(gè)查詢語(yǔ)句
  嵌套查詢可由多個(gè)子查詢組成, 求解的方式是由里及外;
  子查詢返回的結(jié)果一般都是集合, 故而建議使用 IN 關(guān)鍵字;
--  查詢   數(shù)據(jù)庫(kù)結(jié)構(gòu) -1  的所有考試結(jié)果 (學(xué)號(hào), 科目編號(hào), 成績(jī)), 并且成績(jī)降序排列
--  方法一: 使用連接查詢
SELECT studentno,r.subjectno,StudentResult
FROM result r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE subjectname =  數(shù)據(jù)庫(kù)結(jié)構(gòu) -1 
ORDER BY studentresult DESC;
--  方法二: 使用子查詢 (執(zhí)行順序: 由里及外)
SELECT studentno,subjectno,StudentResult
FROM result
WHERE subjectno=(
 SELECT subjectno FROM `subject`
 WHERE subjectname =  數(shù)據(jù)庫(kù)結(jié)構(gòu) -1 
ORDER BY studentresult DESC;
--  查詢課程為   高等數(shù)學(xué) -2  且分?jǐn)?shù)不小于 80 分的學(xué)生的學(xué)號(hào)和姓名
--  方法一: 使用連接查詢
SELECT s.studentno,studentname
FROM student s
INNER JOIN result r
ON s.`StudentNo` = r.`StudentNo`
INNER JOIN `subject` sub
ON sub.`SubjectNo` = r.`SubjectNo`
WHERE subjectname =  高等數(shù)學(xué) -2  AND StudentResult =80
--  方法二: 使用連接查詢 + 子查詢
--  分?jǐn)?shù)不小于 80 分的學(xué)生的學(xué)號(hào)和姓名
SELECT r.studentno,studentname FROM student s
INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
WHERE StudentResult =80
--  在上面 SQL 基礎(chǔ)上, 添加需求: 課程為   高等數(shù)學(xué) -2
SELECT r.studentno,studentname FROM student s
INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
WHERE StudentResult =80 AND subjectno=(
 SELECT subjectno FROM `subject`
 WHERE subjectname =  高等數(shù)學(xué) -2 
--  方法三: 使用子查詢
--  分步寫簡(jiǎn)單 sql 語(yǔ)句, 然后將其嵌套起來(lái)
SELECT studentno,studentname FROM student WHERE studentno IN(
 SELECT studentno FROM result WHERE StudentResult =80 AND subjectno=(
 SELECT subjectno FROM `subject` WHERE subjectname =  高等數(shù)學(xué) -2 
 )
練習(xí)題目:
  查  C 語(yǔ)言 -1  的前 5 名學(xué)生的成績(jī)信息 (學(xué)號(hào), 姓名, 分?jǐn)?shù))
  使用子查詢, 查詢郭靖同學(xué)所在的年級(jí)名稱
*/

關(guān)于“怎么使用 DQL 查詢數(shù)據(jù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向 AI 問(wèn)一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)8790字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 屯留县| 拉孜县| 巴彦县| 珲春市| 汝南县| 九台市| 丹阳市| 永靖县| 星子县| 浦东新区| 唐海县| 浪卡子县| 长汀县| 油尖旺区| 虎林市| 白水县| 合肥市| 西昌市| 顺义区| 东阳市| 荆门市| 汉阴县| 亚东县| 云龙县| 武清区| 辉南县| 临安市| 和林格尔县| 曲松县| 连云港市| 永泰县| 辉南县| 东丽区| 荔波县| 横山县| 枣阳市| 阳城县| 岳池县| 六安市| 修文县| 唐海县|