Mysql学习笔记7 查询数据.docx
- 文档编号:12328963
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:20
- 大小:20.58KB
Mysql学习笔记7 查询数据.docx
《Mysql学习笔记7 查询数据.docx》由会员分享,可在线阅读,更多相关《Mysql学习笔记7 查询数据.docx(20页珍藏版)》请在冰豆网上搜索。
Mysql学习笔记7查询数据
MySQL学习笔记7
查询数据
查询数据指从数据库中获取所需要的数据。
查询数据是数据库操作中最常用,也是最重要的操作。
用户可以根据自己对数据的需求,使用不同的查询方式。
通过不同的查询方式,可以获得不同的数据。
1:
查询语句的基本语法
2:
在单表上查询数据
3:
使用集合函数查询数据
4:
多表上联合查询
5:
子查询
6:
合并查询结果
7:
为表和字段取别名
8:
使用正则表达式查询
创建名为employee的表:
CREATETABLEemployee(
numINTNOTNULLPRIMARYKEYAUTO_INCREMENT,
d_idINTNOTNULL,
nameVARCHAR(20),
ageINT,
sexVARCHAR(4),
homeaddrVARCHAR(50)
);
插入四条记录:
INSERTINTOemployeeVALUES(NULL,1001,'张三',26,'男','北京市海定区');
INSERTINTOemployeeVALUES(NULL,1001,'李四',24,'女','北京市昌平区');
INSERTINTOemployeeVALUES(NULL,1002,'王五',25,'男','湖南长沙市');
INSERTINTOemployeeVALUES(NULL,1004,'Anc',15,'男','England');
插入后employee表的内容如下:
|num|d_id|name|age|sex|homeaddr|
|-----|------|--------|------|------|--------------------|
|1|1001|张三|26|男|北京市海定区|
|2|1001|李四|24|女|北京市昌平区|
|3|1002|王五|25|男|湖南长沙市|
|4|1004|Anc|15|男|England|
创建work表:
CREATETABLEwork(
idINT,
nameVARCHAR(20),
sexVARCHAR(4),
infoVARCHAR(50)
);
插入三条记录:
INSERTINTOworkVALUES(1001,'THX',NULL,NULL);
INSERTINTOworkVALUES(1002,'CCH',NULL,NULL);
INSERTINTOworkVALUES(1003,'ZKJ',NULL,'student');
创建grade表:
CREATETABLEgrade(
numINT(10)NOTNULL,
courseVARCHAR(10)NOTNULL,
scoreFLOAT
);
插入记录:
INSERTINTOgradeVALUES(1001,'数学',80);
INSERTINTOgradeVALUES(1001,'语文',90);
INSERTINTOgradeVALUES(1001,'英语',85);
INSERTINTOgradeVALUES(1001,'计算机',95);
INSERTINTOgradeVALUES(1002,'数学',88);
INSERTINTOgradeVALUES(1002,'语文',90);
INSERTINTOgradeVALUES(1002,'英语',89);
INSERTINTOgradeVALUES(1002,'计算机',90);
INSERTINTOgradeVALUES(1003,'数学',80);
INSERTINTOgradeVALUES(1003,'语文',98);
INSERTINTOgradeVALUES(1003,'英语',85);
INSERTINTOgradeVALUES(1003,'计算机',95);
创建computer_stu表:
CREATETABLEcomputer_stu(
idINTPRIMARYKEY,
nameVARCHAR(20),
scoreFLOAT
);
插入记录:
INSERTINTOcomputer_stuVALUES(1001,'Lily',85);
INSERTINTOcomputer_stuVALUES(1002,'Tom',91);
INSERTINTOcomputer_stuVALUES(1003,'Jim',87);
INSERTINTOcomputer_stuVALUES(1004,'Aric',77);
INSERTINTOcomputer_stuVALUES(1005,'Lucy',65);
INSERTINTOcomputer_stuVALUES(1006,'Andy',99);
INSERTINTOcomputer_stuVALUES(1007,'Lda',85);
INSERTINTOcomputer_stuVALUES(1008,'Jeck',70);
创建scholarship表:
CREATETABLEscholarship(
levelINTPRIMARYKEY,
scoreINT
);
插入记录:
INSERTINTOscholarshipVALUES(1,90);
INSERTINTOscholarshipVALUES(2,80);
INSERTINTOscholarshipVALUES(3,70);
创建info表:
CREATETABLEinfo(
idINT,
nameVARCHAR(20)
);
插入记录:
INSERTINTOinfoVALUES(1,'Arsc');
INSERTINTOinfoVALUES(2,'Eric');
INSERTINTOinfoVALUES(4,'Jack');
INSERTINTOinfoVALUES(5,'Lucy');
INSERTINTOinfoVALUES(6,'Lily');
INSERTINTOinfoVALUES(7,'Tom');
INSERTINTOinfoVALUES(8,'aaa');
INSERTINTOinfoVALUES(9,'dadaaa');
INSERTINTOinfoVALUES(10,'aaabd');
INSERTINTOinfoVALUES(11,'abc12');
INSERTINTOinfoVALUES(12,'ad321');
INSERTINTOinfoVALUES(17,'ababab');
1:
基本查询语句
MySQL中可以使用SELECT语句来来查询数据。
根据查询的条件不同,数据库系统会找到不同的数据。
通过SELECT语句可以很方便的获取所需的信息。
MySQL中,SELECT的基本语法形式如下:
SELECT属性列表
FROM表名和视图列表
[WHERE条件表达式1]
[GROUPBY属性名1[HAVING条件表达式2]]
[ORDERBY属性名2[ASC|DESC]]
基本的条件查询语句:
SELECTnum,d_id,name,age,sex,homeaddr
FROMemployee
WHEREage<26
ORDERBYd_idDESC;
查询结果:
|num|d_id|name|age|sex|homeaddr|
|-----|------|--------|------|------|--------------------|
|4|1004|Anc|15|男|England|
|3|1002|王五|25|男|湖南长沙市|
|2|1001|李四|24|女|北京市昌平区|
2:
在单表上查询数据
单表查询是指从一张表中查询所需要的数据
查询条件表
|查询条件|符号或关键字|
|------------------|----------------------------------------------------|
|指定范围|BETWEENAND、NOTBETWEENAND|
|指定集合|IN、NOTIN|
|匹配字符|LIKE、NOTLIKE|
|是否为空值|ISNULL、ISNOTNULL|
|多个查询条件|AND、OR|
2.1查询指定记录
SELECT语句中可以设置查询条件。
用户可以根据自己的需要来设置查询条件,按条件进行查询。
WHERE语句可以用来指定查询条件。
SELECT*FROMemployeeWHEREd_id=1001;
2.2带IN关键字的查询
IN关键字可以判断某个字段的值是否在指定的集合中。
如果字段的值在集合中,则满足查询条件,该记录将被查询出来。
如果不在集合中,则不被查询出来。
其语法规则为:
[NOT]IN(元素1,元素2,、、、,元素n)
SELECT*FROMemployeeWHEREd_idIN(1001,1004);
2.3带BETWEENAND的范围查询
其语法规则为:
[NOT]BETWEEN取值1AND取值2
SELECT*FROMemployeeWHEREageBETWEEN15AND25;
2.4带LIKE的字符匹配查询
LIKE关键字可以匹配字符串是否相等。
其语法规则为:
[NOT]LIKE‘字符串’
SELECT*FROMemployeeWHEREnameLIKE'Anc';
SELECT*FROMemployeeWHEREhomeaddrLIKE'北京%';
SELECT*FROMemployeeWHEREnameLIKE'A_c';
%代表任意字符
_代表一个字符
2.5查询空值
ISNULL关键字可以判断字段的值是否为控制(NULL)。
其语法规则如下:
IS[NOT]NULL
SELECT*FROMworkWHEREinfoISNULL;
2.6带AND的多条件查询
2.7带OR的多条件查询
2.8查询结果不重复
如果在表中的某些字段上没有唯一性约束,这些字段可能存在着重复的值。
例如,employee表中的d_id字段就存在重复的情况。
SELECTDISTINCTd_idFROMemployee;
2.9对查询结果排序
从表中查询出来的数据可能是无序的,或者其排列顺序不是用户所期望的顺序。
可以使用ORDERBY关键字对记录进行排序。
其语法规则为:
ORDERBY属性名[ASC|DESC]
SELECT*FROMemployeeORDERBYage;
SELECT*FROMemployeeORDERBYd_idASC,ageDESC;
查询结果为:
|num|d_id|name|age|sex|homeaddr|
|-----|------|--------|------|------|--------------------|
|1|1001|张三|26|男|北京市海定区|
|2|1001|李四|24|女|北京市昌平区|
|3|1002|王五|25|男|湖南长沙市|
|4|1004|Anc|15|男|England|
2.10分组查询
GROUPBY关键字可以将查询结果按某个字段或多个字段进行分组。
字段中值相等的为一组。
其语法规则为:
GROUPBY属性名[HAVING条件表达式][WITHROLLUP]
SELECT*FROMemployeeGROUPBYsex;
查询结果:
|num|d_id|name|age|sex|homeaddr|
|-----|------|--------|------|------|--------------------|
|2|1001|李四|24|女|北京市昌平区|
|1|1001|张三|26|男|北京市海定区|
SELECTsex,GROUP_CONCAT(name)FROMemployeeGROUPBYsex;
查询结果:
|sex|GROUP_CONCAT(name)|
|------|--------------------|
|女|李四|
|男|张三,王五,Anc|
SELECTsex,COUNT(sex)FROMemployeeGROUPBYsex;
查询结果:
|sex|COUNT(sex)|
|------|--------------------|
|女|1|
|男|3|
SELECTsex,COUNT(sex)FROMemployee
GROUPBYsexHAVINGCOUNT(sex)>=3;
查询结果:
|sex|COUNT(sex)|
|------|--------------------|
|男|3|
SELECT*FROMemployeeGROUPBYd_id,sex;
|num|d_id|name|age|sex|homeaddr|
|-----|------|--------|------|------|--------------------|
|2|1001|李四|24|女|北京市昌平区|
|1|1001|张三|26|男|北京市海定区|
|3|1002|王五|25|男|湖南长沙市|
|4|1004|Anc|15|男|England|
SELECTsex,COUNT(sex)FROMemployee
GROUPBYsexWITHROLLUP;
WITHROLLUP起到汇总的作用,查询结果:
|sex|COUNT(sex)|
|------|--------------------|
|女|1|
|男|3|
|NULL|4|
2.11用LIMIT限制查询结果的数量
LIMIT是MySQL中的一个特殊关键字。
其可以用来指定查询结果从哪条记录开始显示。
还可以指定一共显示多少条记录。
SELECT*FROMemployeeLIMIT2;
只显示两条记录。
如果不指定位置,显示前2条。
SELECT*FROMemployeeLIMIT1,2;
从第2条记录开始,显示2条记录。
3:
使用集合函数查询
集合函数包括COUNT()、SUM()、AVG()、MAX()和MIN()。
GROUPBY关键字通常需要与集合函数一起使用。
SELECTd_id,COUNT(*)FROMemployeeGROUPBYd_id;
查询结果:
|d_id|COUNT(*)|
|------|----------|
|1001|2|
|1002|1|
|1004|1|
SELECTnum,SUM(score)FROMgradeGROUPBYnum;
显示结果:
|num|SUM(score)|
|------|------------|
|1001|350|
|1002|357|
|1003|358|
4:
连接查询
连接查询是将两个或者两个以上的表按某个条件连接起来,从中选取需要的数据。
当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表。
连接查询包括内连接查询和外连接查询。
4.1内连接查询
内连接查询是一种最常用的连接查询。
内连接查询可以查询两个或两个以上的表。
当两个表中存在表示相同意义的字段时,可以通过该字段来连接这几个表。
当该字段的值相等时,就查询出该记录。
SELECTnum,name,employee.d_id,age,sex,d_name,function
FROMemployee,department
WHEREemployee.d_id=department.d_id;
查询结果:
|num|name|d_id|age|sex|d_name|function|
|-----|--------|------|------|------|-----------|--------------------|
|1|张三|1001|26|男|销售部|负责产品销售|
|2|李四|1001|24|女|销售部|负责产品销售|
|3|王五|1002|25|男|科研部|研发新产品|
4.2外连接查询
外连接查询可以查询两个或两个以上的表。
外连接查询也需要通过指定字段来进行连接。
当该字段取值相等时,可以查询出该记录。
而且,该字段取值不相等的记录也可以查询出来。
外连接查询包括左连接查询和右连接查询。
其基本语法如下:
SELECT属性名列表
FROM表名1LEFT|RIGHTJOIN表名2
ON表名1.属性名1=表名2.属性名2;
LEFTJOIN以表名1为准,RIGHTJOIN以表名2为准。
SELECTnum,name,employee.d_id,age,sex,d_name,function
FROMemployeeLEFTJOINdepartment
ONemployee.d_id=department.d_id;
查询结果:
|num|name|d_id|age|sex|d_name|function|
|-----|--------|------|------|------|-----------|--------------------|
|1|张三|1001|26|男|销售部|负责产品销售|
|2|李四|1001|24|女|销售部|负责产品销售|
|3|王五|1002|25|男|科研部|研发新产品|
|4|Anc|1004|15|男|NULL|NULL|
4.3复合条件连接查询
SELECTnum,name,employee.d_id,age,sex,d_name,function
FROMemployee,department
WHEREemployee.d_id=department.d_id
ANDage>24;
查询结果:
|num|name|d_id|age|sex|d_name|function|
|-----|--------|------|------|------|-----------|--------------------|
|1|张三|1001|26|男|销售部|负责产品销售|
|3|王五|1002|25|男|科研部|研发新产品|
SELECTnum,name,employee.d_id,age,sex,d_name,function
FROMemployee,department
WHEREemployee.d_id=department.d_id
ORDERBYageASC;
查询结果:
|num|name|d_id|age|sex|d_name|function|
|-----|--------|------|------|------|-----------|--------------------|
|2|李四|1001|24|女|销售部|负责产品销售|
|3|王五|1002|25|男|科研部|研发新产品|
|1|张三|1001|26|男|销售部|负责产品销售|
5:
子查询
子查询是将一个查询语句嵌套在另一个查询语句中。
内层查询语句的查询结果,可以为外层查询语句提供查询条件。
因为在特定情况下,一个查询语句的条件需要另一个查询语句来获取。
通过子查询,可以实现多表之间的查询。
子查询中可能包括IN、NOTIN、ALL、EXISTS、NOTEXISTS等关键字。
子查询中还可能包含比较运算符,如“=”、“!
=”、“>”、“<”等。
5.1带IN关键字的子查询
SELECT*FROMemployee
WHEREd_idIN
(SELECTd_idFROMdepartment);
5.2带比较运算符的子查询
子查询可以使用比较运算符。
其在子查询中使用的非常广泛。
如查询分数、年龄、价格、收入等。
找出获得二等奖学金的学生的学号、姓名、分数
SELECTid,name,scoreFROMcomputer_stu
WHEREscore<
(SELECTscoreFROMscholarshipWHERElevel=1)
ANDscore>=
(SELECTscoreFROMscholarshipWHERElevel=2);
查询结果:
|id|name|score|
|------|------|-------|
|1001|Lily|85|
|1003|Jim|87|
|1007|Lda|85|
5.3带EXISTS关键字的子查询
EXISTS关键字表示存在。
使用EXISTS关键字时,内层查询语句不返回查询的记录。
二十返回一个真假值。
如果内层查询语句查询到满足条件的记录,就返回一个真值(True)。
否则,将返回一个假值(Flase)。
返回真值时,外层查询语句将进行查询。
返回假值时,外层查询语句不进行查询。
SELECT*FROMemployee
WHEREEXISTS
(SELECTd_nameFROMdepartment
WHEREd_id=1003);
5.4带ANY关键字的子查询
ANY关键字表示满足其中任一条件。
使用ANY关键字时,只要满足内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句。
找出所有可以获得奖学金同学的信息
SELECT*FROMcomputer_st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mysql学习笔记7 查询数据 Mysql 学习 笔记 查询 数据