Mysql学习笔记7 查询数据.docx

上传人:b****2 文档编号:1695483 上传时间:2023-05-01 格式:DOCX 页数:20 大小:20.58KB
下载 相关 举报
Mysql学习笔记7 查询数据.docx_第1页
第1页 / 共20页
Mysql学习笔记7 查询数据.docx_第2页
第2页 / 共20页
Mysql学习笔记7 查询数据.docx_第3页
第3页 / 共20页
Mysql学习笔记7 查询数据.docx_第4页
第4页 / 共20页
Mysql学习笔记7 查询数据.docx_第5页
第5页 / 共20页
Mysql学习笔记7 查询数据.docx_第6页
第6页 / 共20页
Mysql学习笔记7 查询数据.docx_第7页
第7页 / 共20页
Mysql学习笔记7 查询数据.docx_第8页
第8页 / 共20页
Mysql学习笔记7 查询数据.docx_第9页
第9页 / 共20页
Mysql学习笔记7 查询数据.docx_第10页
第10页 / 共20页
Mysql学习笔记7 查询数据.docx_第11页
第11页 / 共20页
Mysql学习笔记7 查询数据.docx_第12页
第12页 / 共20页
Mysql学习笔记7 查询数据.docx_第13页
第13页 / 共20页
Mysql学习笔记7 查询数据.docx_第14页
第14页 / 共20页
Mysql学习笔记7 查询数据.docx_第15页
第15页 / 共20页
Mysql学习笔记7 查询数据.docx_第16页
第16页 / 共20页
Mysql学习笔记7 查询数据.docx_第17页
第17页 / 共20页
Mysql学习笔记7 查询数据.docx_第18页
第18页 / 共20页
Mysql学习笔记7 查询数据.docx_第19页
第19页 / 共20页
Mysql学习笔记7 查询数据.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Mysql学习笔记7 查询数据.docx

《Mysql学习笔记7 查询数据.docx》由会员分享,可在线阅读,更多相关《Mysql学习笔记7 查询数据.docx(20页珍藏版)》请在冰点文库上搜索。

Mysql学习笔记7 查询数据.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2