亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL查詢數(shù)據(jù)(單表查詢)詳解

 更新時(shí)間:2023年05月30日 14:50:41   作者:YorkShare_z  
這篇文章主要介紹了MySQL查詢數(shù)據(jù)(單表查詢)的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.單表查詢

語(yǔ)法:select {*| <字段列表> }   from <表1>,<表2>... where <表達(dá)式>  [GROUP BY] [HAVING] [ORDER BY] [LIMIT]

創(chuàng)建數(shù)據(jù)庫(kù),準(zhǔn)備表及數(shù)據(jù)

/*創(chuàng)建數(shù)據(jù)庫(kù)*/
create database if not EXISTS students character set utf8 collate utf8_general_ci;
/*創(chuàng)建表*/
use students;
create table if not EXISTS student
(
    stuID  int(5)  not null primary key,
    stuName  varchar(50)  not null,
    stuSex CHAR(10),
    stuAge smallint
);
CREATE TABLE if not EXISTS courses(
         couID int  not null primary key auto_increment COMMENT '學(xué)號(hào)',
         couName varchar(50) not null DEFAULT('大學(xué)英語(yǔ)'),
         couHours  smallint UNSIGNED COMMENT '學(xué)時(shí)',
         couCredit  float DEFAULT(2) COMMENT '學(xué)分'
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE  utf8mb4_0900_ai_ci;
CREATE TABLE if not EXISTS stu_cou(
         ID int not null primary key auto_increment,
         stuID int(5)  not null  COMMENT '學(xué)號(hào)',
         couID int  not null  COMMENT '課程編號(hào)',
         time timestamp not null DEFAULT(now())
);
 /*添加外鍵約束*/
 alter table stu_cou add CONSTRAINT fk_stuid foreign key(stuID) REFERENCES student(stuID) ON UPDATE CASCADE ON DELETE CASCADE ;
 alter table stu_cou add CONSTRAINT fk_couid foreign key(couID) REFERENCES courses(couID) ON UPDATE CASCADE ON DELETE CASCADE ;
  /*插入數(shù)據(jù)*/
 insert into student(stuID,stuName,stuSex,stuAge) values(1001,'張三','男',19),(1002,'李四','男',18),(1003,'王五','男',18),(1004,'黃麗麗','女',18),(1005,'李曉輝','女',19),(1006,'張敏','女',18);
 insert into student VALUES(1007,'五條人','男',20),(1008,'胡五伍','女',19);
 insert into courses(couID,couName,couHours,couCredit) values(50,'大學(xué)英語(yǔ)',64,2),(60,'計(jì)算機(jī)基礎(chǔ)',78,2.5),(70,'Java程序設(shè)計(jì)',108,6),(80,'數(shù)據(jù)庫(kù)應(yīng)用',48,2.5);
 insert into stu_cou(stuID,couID) values(1001,50),(1001,60),(1001,70),(1001,80),(1002,50),(1002,60),(1002,70),(1002,80),(1003,50),(1003,60),(1003,70),(1003,80),(1004,50),(1004,60),(1004,70),(1004,80),(1005,50),(1005,60),(1005,70),(1005,80),(1006,50),(1006,60),(1006,70),(1006,80);

 (1)簡(jiǎn)單查詢

例1:查詢student表中所有數(shù)據(jù)。 

use students;
select * from student;

例2:查詢指定列的數(shù)據(jù),查詢student表中stuID,stuName兩列。 

select stuID,stuName from student;

例3:給列指定別名,查詢student表中stuID列,指定別名為學(xué)號(hào),stuName列,指定別名為姓名。 

select stuID as '學(xué)號(hào)',stuName as '姓名' from student;

修改字段別名的語(yǔ)法:as+'名稱'

 (2)條件查詢

條件:where 運(yùn)算符  

操作符含義范圍結(jié)果
=等于5=6false
<>或者 !=不等于5<>6true
>大于5>6false
<小于5<6true
>=大于等于5>=6false
<=小于等于5<=6true
between A and B在A和B之間between 1 and 10在1~10之間,包括邊界值,相當(dāng)于>=1 and <=10
not between A and B不在A和B之間not between 1 and 10不在1~10之間,包括邊界值,相當(dāng)于>=1 or <=10
AND連接條件&&條件1 和條件2都成立都是true 才是true
OR或者||條件1 和條件2有一個(gè)成立即可有一個(gè)true才是true
IN以列表項(xiàng)的形式支持多個(gè)選擇 IN (value1,value2,…)或者 NOT IN (value1,value2,…)與or操作符結(jié)果類(lèi)似

例4:查詢student表中stuID為1001的記錄。 

select * from student where stuID=1001;

例5:查詢student表中性別為男且年齡小于19歲的記錄。 

select * from student where stuSex='男' and stuAge<19;

例6:查詢student表中性別為女或年齡等于18歲的記錄。 

select * from student where stuSex='女' or stuAge=18;

 例7:查詢student表中學(xué)號(hào)為1001和1004的記錄。 

SELECT * from student where stuID=1001 or stuID=1004;
SELECT * from student where stuID in(1001,1004);

 例8:查詢student表中學(xué)號(hào)為1001到1004的記錄。  

SELECT * from student where stuID BETWEEN 1001 and 1004;

   例9:查詢student表中學(xué)號(hào)不包含1001到1004的記錄。  

SELECT * from student where stuID not  BETWEEN 1001 and 1004;

 (3)模糊查詢

使用like關(guān)鍵字,通配符為

通配符描述
百分號(hào)(%)替代0個(gè)、1個(gè)或多個(gè)字符
下劃線(_)僅替代一個(gè)字符

例9:查詢student表中所有姓張的同學(xué)的信息。 

SELECT * from student where stuName like '張%';

例10:查詢student表中姓名包含“麗”字的同學(xué)的信息。  

SELECT * from student where stuName like '%麗%';

 例11:分別查詢student表中姓名包含“五”字的同學(xué)的信息。 

SELECT * from student where stuName like '%五%';

  '%五%'可以替代'五%'、'%五'兩種情況。 

(4)排序

排序的關(guān)鍵字是order by 字段名稱,不使用where關(guān)鍵字,asc表示升序,desc表示降序,默認(rèn)不寫(xiě)就是升序排列。

  例12:查詢student表中的記錄,根據(jù)年齡進(jìn)行升序排列,降序排列。 

SELECT * from student  ORDER BY stuAge asc;
SELECT * from student  ORDER BY stuAge desc;

  例13:查詢student表中的記錄,根據(jù)年齡進(jìn)行升序排列,姓名進(jìn)行降序排列。 

SELECT * from student  ORDER BY stuAge asc,stuName desc;

上述根據(jù)stuName字段排序的時(shí)候,字段內(nèi)容是漢字,所以排序失效了,解決辦法如下:

方法一:使用convert方法轉(zhuǎn)換字段的字符集為gbk。

select * from student ORDER BY stuAge asc,CONVERT(stuName using gbk) desc;

方法二:修改字段的字符集為gbk。

 修改后運(yùn)行結(jié)果為:

  注意:在對(duì)多列進(jìn)行排序的時(shí)候,首先第一列必須有相同的列值,才會(huì)對(duì)第二列進(jìn)行排序呢。如果第一列都是唯一的值,將不會(huì)對(duì)第二列進(jìn)行排序。

 (5)聚合函數(shù)

 常用的聚合函數(shù)

  例14:使用聚合函數(shù)查詢學(xué)生總?cè)藬?shù)。 

SELECT COUNT(*) as '學(xué)生總?cè)藬?shù)' from student; 
SELECT COUNT(stuID) as '學(xué)生總?cè)藬?shù)' from student;

例15:使用聚合函數(shù)查詢課程表中所有課程的學(xué)分和。 

SELECT sum(couCredit) as '總學(xué)分' from courses;

例16:分別使用聚合函數(shù)查詢年齡最大的學(xué)生和年齡最小的學(xué)生的年齡。 

SELECT max(stuAge) as '年齡最大的同學(xué)' from student; 
SELECT min(stuAge) as '年齡最小的同學(xué)' from student;

例17:使用聚合函數(shù)查詢課程表中所有課程的平均學(xué)時(shí)數(shù)。

SELECT avg(couHours) as '四門(mén)課程平均學(xué)時(shí)數(shù)' from courses;

(6)分組查詢

修改原數(shù)據(jù)庫(kù)和表,將courses表增加一列名為grade的成績(jī)字段,并插入隨機(jī)值,運(yùn)行一下命令。

alter table stu_cou add COLUMN grade FLOAT null;
UPDATE stu_cou set grade=(SELECT FLOOR(50 +RAND() * 50));

如何生成指定范圍的隨機(jī)數(shù)

生成0-10的隨機(jī)數(shù)
SELECT FLOOR(RAND() * 10)
生成10-100的隨機(jī)數(shù)
SELECT FLOOR(10 +RAND() * 90)

 語(yǔ)法:

GROUP BY 字段名 [HAVING 條件表達(dá)式]
參數(shù):
1、字段名:是指按照該字段的值進(jìn)行分組(分組是所依據(jù)的列名稱)
2、HAVING條件表達(dá)式:用來(lái)限制分組后的顯示,符合條件表達(dá)式的結(jié)果將被顯示

核心思想:在查詢SQL中指定分組的列名,然后根據(jù)該列的值(內(nèi)容)進(jìn)行分組,值相等的為一組。

注意:group by通常與聚合函數(shù)一起結(jié)合使用。

 例18:使用分組查詢輸出學(xué)生性別。 

SELECT stuSex as '性別' from student  GROUP  BY stuSex;

例19:使用分組查詢輸出學(xué)生學(xué)號(hào)和姓名。 

SELECT stuID,stuName from student  GROUP  BY stuID;

以上兩個(gè)例子中,group by后面的字段名稱必須是select關(guān)鍵字后面出現(xiàn)的字段名稱,除以主鍵字段分組以外,其他的任意兩個(gè)或者兩個(gè)以上的非主鍵字段無(wú)法使用group by進(jìn)行分組,如:

SELECT stuName,stuSex from student  GROUP  BY stuSex;

錯(cuò)誤提示如下:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'students.student.stuName' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

以上兩個(gè)例子中g(shù)roup by單獨(dú)使用時(shí),只顯示出每一組的第一條記錄,所以group by單獨(dú)使用時(shí)的實(shí)際意義不大,因此,一般在使用集合函數(shù)時(shí)才使用GROUP BY關(guān)鍵字。

例20:分組查詢學(xué)生表中男女同學(xué)的人數(shù)。  

select stuSex,COUNT(stuID) as '人數(shù)' from student GROUP BY stuSex;

  例21:分組查詢學(xué)生表中男女同學(xué)的平均年齡,人數(shù),男女同學(xué)年齡最大值,年齡最小值。  

select stuSex,AVG(stuAge) as '平均年齡',COUNT(stuID) as '人數(shù)',MAX(stuAge) as '最大年齡',min(stuAge) as '最小年齡' from student GROUP BY stuSex;

 注意:從以上兩個(gè)例子可知,除聚合函數(shù)之外,SELECT語(yǔ)句中的每個(gè)列都必須在GROUP BY子句中給出。如group by 中的stuSex列在select后必須出現(xiàn)。

  例22:分組查詢學(xué)生表中男女同學(xué)各年齡段的人數(shù)。  

select stuSex,stuAge,COUNT(stuID) as '人數(shù)' from student GROUP BY stuSex,stuAge;

例22是使用GROUP BY可以對(duì)多個(gè)字段進(jìn)行分組,GROUP BY關(guān)鍵字后面跟需要分組的字段。
注意:(1)MYSQL根據(jù)多字段的值來(lái)進(jìn)行層次分組,分組層次從左到右
            (2)即先按第一個(gè)字段分組,然后在第一個(gè)字段值相同的記錄中,再根據(jù)第二個(gè)字段的值進(jìn)行分組,以此類(lèi)推。

多字段分組再舉一個(gè)例子,修改student表增加stuColleage字段表示學(xué)院,并插入值。

alter table student add COLUMN stuColleage varchar(100) null;
update student set stuColleage='大數(shù)據(jù)學(xué)院' where stuID BETWEEN 1001 and  1003;
update student set stuColleage='物流學(xué)院' where stuID BETWEEN 1004 and  1006;
update student set stuColleage='康養(yǎng)學(xué)院' where stuID BETWEEN 1007 and  1008;

分組查詢學(xué)生表中各學(xué)院男女同學(xué)的人數(shù)。  

select stuColleage,stuSex,COUNT(stuID) as '人數(shù)' from student GROUP BY stuColleage,stuSex;

  先按照stuColleage分組,再按照stuSex字段分組,返回第一個(gè)分組字段stuColleage的第一個(gè)字段值后,實(shí)際與第二個(gè)分組字段stuSex返回的值(可能是多個(gè))進(jìn)行組合,成為新的記錄行。

如“康養(yǎng)學(xué)院”+“男”,“康養(yǎng)學(xué)院”+“女”,而大數(shù)據(jù)學(xué)院沒(méi)有stuSex值為“女”的記錄,物流學(xué)院沒(méi)有stuSex值為“男”的記錄,所以均只有一條記錄。

若增加一個(gè)學(xué)生住址字段stuAddress,以stuAddress字段作為第二個(gè)分組的字段,則stuAddress可能會(huì)返回幾十條不同信息與第一個(gè)分組的字段進(jìn)行組合。

GROUP BY關(guān)鍵字可以和GROUP_CONCAT()函數(shù)一起使用,GROUP_CONCAT()函數(shù)會(huì)把每個(gè)分組的字段值都顯示出來(lái)。

 例23:分組查詢學(xué)生表中各年齡段的學(xué)生姓名及人數(shù)。

select stuAge,GROUP_CONCAT(stuName) as '姓名列表',COUNT(stuID) as '人數(shù)' from student GROUP BY stuAge;

  例24:按照學(xué)號(hào)進(jìn)行分組,查詢選課表中各科目課程號(hào),總成績(jī)及平均成績(jī)。 

select stuID,GROUP_CONCAT(couID) as '課程號(hào)',sum(grade) as '總成績(jī)',avg(grade) as '平均分' from stu_cou GROUP BY stuID;

 使用HAVING過(guò)濾分組,having會(huì)將分組后的數(shù)據(jù)按照分組條件進(jìn)一步篩選。

 例24:按照學(xué)號(hào)進(jìn)行分組,查詢選課表中各科目課程號(hào),總成績(jī)及平均成績(jī)大于75分的記錄。  

select stuID,GROUP_CONCAT(couID) as '課程號(hào)',sum(grade) as '總成績(jī)',avg(grade) as '平均分' from stu_cou GROUP BY stuID HAVING avg(grade)>75;

 GROUP BY子句允許添加WITH ROLLUP修飾符,該修飾符可以對(duì)分組后各組的某個(gè)列的結(jié)果值進(jìn)行匯總,并在結(jié)果中輸出,即提供更高一級(jí)的聚合操作。(參考:http://chabaoo.cn/article/90130.htm

  例24:按照性別進(jìn)行分組,查詢學(xué)生表中男女同學(xué)的人數(shù)及總?cè)藬?shù)。  

select stuSex,COUNT(stuID) as '人數(shù)' from student GROUP BY stuSex with rollup;

 stuSex字段下的null代表高級(jí)別的聚合行。

(6)使用LIMIT限制查詢結(jié)果的數(shù)量

 從某個(gè)值開(kāi)始,取出之后的N條數(shù)據(jù),有兩種形式的用法:(http://chabaoo.cn/article/226348.htm

1.limit a,b 后綴兩個(gè)參數(shù)的時(shí)候(/*參數(shù)必須是一個(gè)整數(shù)常量*/),其中a是指記錄開(kāi)始的偏移量,b是指從第a+1條開(kāi)始,取b條記錄。

2.limit b 后綴一個(gè)參數(shù)的時(shí)候,是直接取值到第多少位,類(lèi)似于:limit 0,b 。

 例25:查詢學(xué)生表中從第2條記錄開(kāi)始的3條記錄。 

select * from student LIMIT 1,3;

 例25:查詢學(xué)生表中的前4條記錄。 

select * from student LIMIT 4;/*limit 0,4*/

 (7)分頁(yè)查詢

 http://chabaoo.cn/article/248328.htm

 (8)使用distinct去除重復(fù)記錄 

select DISTINCT stuSex from student;

參考文章:

https://blog.csdn.net/ccx_nc/article/details/120922391

https://blog.csdn.net/DianLanHong/article/details/119788185 MySQL where in 用法詳解 

https://www.cnblogs.com/yangjianbo/articles/15739877.html 

https://blog.csdn.net/weixin_42352842/article/details/113635581 

https://blog.csdn.net/Hudas/article/details/124370701  [Mysql] LIKE與通配符 

https://www.cnblogs.com/bigbigbigo/p/10953037.html  MySQL 聚合函數(shù)(二)Group By的修飾符——ROLLUP

到此這篇關(guān)于MySQL查詢數(shù)據(jù)(單表查詢)的文章就介紹到這了,更多相關(guān)mysql 查詢數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL多實(shí)例的配置應(yīng)用實(shí)例場(chǎng)景

    MySQL多實(shí)例的配置應(yīng)用實(shí)例場(chǎng)景

    在一臺(tái)服務(wù)器上,運(yùn)行多個(gè)數(shù)據(jù)庫(kù)服務(wù),這些服務(wù)進(jìn)程通過(guò)不同的socket監(jiān)聽(tīng)不同的服務(wù)端口來(lái)提供各自的服務(wù),這篇文章主要介紹了MySQL多實(shí)例的配置場(chǎng)景分析,需要的朋友可以參考下
    2021-12-12
  • MySQL gh-ost DDL 變更工具的實(shí)現(xiàn)

    MySQL gh-ost DDL 變更工具的實(shí)現(xiàn)

    本文主要介紹了MySQL gh-ost DDL變更工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Mysql中STR_TO_DATE函數(shù)使用(字符串轉(zhuǎn)為日期/時(shí)間值)

    Mysql中STR_TO_DATE函數(shù)使用(字符串轉(zhuǎn)為日期/時(shí)間值)

    這篇文章主要給大家介紹了關(guān)于Mysql中STR_TO_DATE函數(shù)使用的相關(guān)資料,STR_TO_DATE函數(shù)的主要功能是字符串轉(zhuǎn)為日期/時(shí)間值,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • MySQL OOM 系列一 Linux內(nèi)存分配

    MySQL OOM 系列一 Linux內(nèi)存分配

    今天想提到的是線上一個(gè)4G的RDS實(shí)例,發(fā)生了OOM(out of memory)的問(wèn)題,MySQL進(jìn)程被直接Kill掉了。在解釋這個(gè)問(wèn)題的時(shí)候,我們首先需要從Linux系統(tǒng)內(nèi)存分配策略講起
    2016-07-07
  • 淺談MySQL安裝starting the server失敗的解決辦法

    淺談MySQL安裝starting the server失敗的解決辦法

    如果電腦是不是第一次安裝MySQL,一般會(huì)出現(xiàn)報(bào)錯(cuò)情況,starting the server失敗,通常是因?yàn)樯洗伟惭b的該軟件未清除干凈,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2021-09-09
  • MYSQL插入數(shù)據(jù)時(shí)檢查字段值是否重復(fù)的方法詳解

    MYSQL插入數(shù)據(jù)時(shí)檢查字段值是否重復(fù)的方法詳解

    這篇文章主要給大家介紹了關(guān)于MYSQL插入數(shù)據(jù)時(shí)檢查字段值是否重復(fù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • MySQL批量插入和唯一索引問(wèn)題的解決方法

    MySQL批量插入和唯一索引問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL批量插入和唯一索引問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL?緩存機(jī)制與架構(gòu)解析(最新推薦)

    MySQL?緩存機(jī)制與架構(gòu)解析(最新推薦)

    本文詳細(xì)介紹了MySQL的緩存機(jī)制和整體架構(gòu),包括一級(jí)緩存(InnoDB?Buffer?Pool)和二級(jí)緩存(Query?Cache),文章還探討了SQL查詢執(zhí)行全流程,并分析了MySQL?8.0移除查詢緩存的原因,最后,提出了應(yīng)用層緩存和InnoDB緩沖池優(yōu)化的建議,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • jdbc中自帶MySQL?連接池實(shí)踐示例

    jdbc中自帶MySQL?連接池實(shí)踐示例

    這篇文章主要為大家介紹了jdbc中自帶MySQL連接池實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(四)--BLOB數(shù)據(jù)類(lèi)型

    與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(四)--BLOB數(shù)據(jù)類(lèi)型

    在MYSQL中BLOB是一個(gè)二進(jìn)制大對(duì)象,用來(lái)儲(chǔ)存可變數(shù)量的數(shù)據(jù),而MSSQL中并沒(méi)有BLOB數(shù)據(jù)類(lèi)型,只有大型對(duì)象數(shù)據(jù)類(lèi)型(LOB)
    2014-06-06

最新評(píng)論