第三章 MySQL高级查询(一)

一.SQL语言的四个分类

  1. 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSERT,UPDATE,DELECT
  2. 2.       DDLData Definition Language(数据定义语言):创建或删除数据库对象操作,有CREATE,DROP,ALTER三个语法组成。
  3. 3.       DQL (STructured Query Language)(数据查询语言):用来对数据库中的语言进行查询,指SELECT语句。
  4. 4.       DCL(Data Control Language)(数据控制语言):用来控制数据库组建的存取许可,存取权限等,如GRANT,REVOKE. <GRANT 授权  REVOKE 取消授权>

二.修改表

MySQL使用ALTER关键字来实现,注意在修改表之前,使用SHOW TABLES语句查询该数据库中是否存在该表。

1.修改表名

语法:     ALTER TABLE <旧表名> RENAME  [TO] <新表名>;

其中[TO]为可选参数,不影响结果,仅修改表名,表结构不变。

2.添加字段<列>

语法:     ALTER  TABLE 表名 ADD 字段名  数据类型 [属性];

例: ALTER TABLE `student`  ADD  `password `  VARCHAR(32)  NOT  NULL;向学生表中添加密码的字段。

3.修改字段<列>

语法: ALTER  TABLE 表名 CHANGE  原字段名  新字段名 数据类型[属性];

例: ALTER TABLE `student`  CHANGE  `password`  `pwd`CHAR(12)  NOTNULL;修改学生表中的密码字段的名称和属性。

4.删除字段

语法: ALTER TABLE 表名  DROP 字段名;

例: ALTER  TABLE `student` DROP  `pwd`;  删除学生表中的密码字段

5.添加主键

语法: ALTER  TABLE  表名  ADD  CONSTRAINT 主键名 PEIMARY  KEY 表名(主键字段);

例: ALTER  TABLE `student`  ADD CONSTRAINT ‘pk_student’  PRIMARY  KEY `student`(`studentNO`);把学生表中的学号设置为主键列

6.添加外键约束

语法: ALTER  TABLE  主表名  ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段)REFERENCES  关联从表名(关联字段);

例:  ALTER  TABLE  `student`  ADD  CONSTRAINT  `fk_student_grade` FOREIGN  KEY(`gradeID`)  REFERENCES  `grade`(`gradeID`);把学生表和年级表中的年级字段设置为主外键关系。

三.数据操作(DML)语句

1.插入单行数据

语法: INSERT INTO 表名 [(字段名列表)]  VALUES (值列表);

插入数据的注意事项:

1)  表的字段名时可选的,如果省略,则需插入表中的所有字段。

2)  多个列表和多个值之间使用逗号“,”分开。

3)  值列表必须和字段列表一一对应,且值类型相同。

4)  如果插入表中部分数据,字段名列表必须填写,且遵循3)。

2.插入多行数据

语法:INSERT INTO 表名 [(字段名列表)]  VALUES (值列表1),(值列表2)….. (值列表n);

3.将查询结果插入到新表

语法一: 需要按插入字段的类型,顺序,个数先创建表,才能插入数据

SELECT 字段1,字段2…….INTO 新表名  FROM  原表名;

语法二:无需先创建表

CREATE  TABLE  新表(SELECT 字段1,字段2……FROM  原表);

4.更新数据记录

语法: UPDATE  表名  SET  字段1=值1,字段2=值2…字段n=值n  WHERE 条件;

5.删除数据

语法一:  DELETE FROM  表名 WHERE条件;

语法二:TRUNCATE  TABLE  表名;

它们的区别是delete按条件删除表中的数据,精确性更高;truncate是删除整个表,效率更高,并且删除后可以重置自增列。

四.数据查询语句(DQL)

 1.SQLserver语句语法

SELECT <字段名列表>

FROM <表名或视图>

WHERE 查询条件

GROUP BY<分组的字段名>

HAVING<筛选分组的条件>

ORDER BY<排序的字段名>[ASC升序/DESC降序]

2 .MySQL的LIMIT子句

SELECT <字段名列表>

FROM <表名或视图>

WHERE 查询条件

GROUP BY<分组的字段名>

ORDER BY<排序的字段名>[ASC升序/DESC降序]

LIMIT 位置偏移量,显示数据的行数;

其中位置的偏移量是指从查询结果集中第几条数据开始显示,第一条记录的位置是0,此参数为可选项,默认从第一条显示.

3 .常用的函数

1.聚合函数

AVG()平均值;COUNT()统计字段的行数; MAX()最大值;  MIN()最小值; SUM()求和

2.字符串函数

函数名、

作用

举例

CONCAT(str1,str2…)

连接括号内的字符串

SELECT CONCAT(‘my’,’s’,’ql’);

返回:mysql

INSERT(str,pos,len,newstr)

将字符串str从pos位置开始,len个字符长的子串替换为字符串newstr

SELECT INSERT(‘这是SQLserver数据库’,3,10,’mysql’)

返回:这是mysql数据库

LOWER(str)

将字符串str全部变为小写

UPPER(str)

将字符串str全部变为大写

SUBSTRING(str,num,len)

返回字符串str的第num个位置开始长度为len的子字符串

SELECT SUBSTRING(‘javamysqlOrcle’,5,5);

返回:mysql

3.时间日期函数

函数名

作用

举例

CURDATE()

获取当前的日期

SELECT CURDATE();

返回:2017-09-23

CURTIME()

获取当前的时间

SELECT CURTIME();

返回:12:25:00

NOW()

获取当前的日期和时间

SELECT NOW();

返回:2017-09-23 12:25:01

WEEK(date)

返回日期date为一年中的第几周

SELECT WEEK(NOW());

返回:26

YEAR(date)

返回日期date的年份

SELECT YEAR(NOW());

返回:20017

HOUR(time)

返回事件time的小时值

SELECT HOUR(NOW());

返回:12,返回现在几点

MINUTE(time)

返回时间的分钟值

DATEDIFF(date1,date2)

返回日期参数date 1和date2之间相隔的天数

SELECR DATEDIFF(NOW(),2009-09-1);

返回:2281

ADDDATE(date,n)

计算日期date加上天数n天之后的日期

SELECT ADDDATE(NOW(),5);

返回:2017-09-28 12:34:00

4.数学函数

函数名

作用

举例

CELT(x)

返回大于或等于x的最小整数

SELECT CELT(2.3);

返回:3

FLOOR(x)

返回小于或等于x的最小整数

SELECR FLOOR(2.3);

返回:2

RAND()

返回0~1之间的随机数

SELECT RAND();

返回:0.551111245245016

五.子查询

1.简单的子查询

定义:子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询

子查询在WHERE语句中的一般用法:

  将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个

例:查询“Java Logic”课程至少一次考试刚好等于60分的学生

第一步:查询“Java Logic”课程的课程编号

第二步:根据课程编号查询成绩是60分学生的学号

第三步:根据学号查询得到学生姓名

法一:采用表连接

SELECT `StudentName` FROM `Student` stu

INNER JOIN `Result` r ON stu.StudentNO = r.StudentNo

INNER JOIN `Subject` sub ON r.SubjectNo = sub.SubjectNo

WHERE `StudentResult` = 60 AND `SubjectName` = 'Java Logic'

GO

实现方法二:采用子查询

SELECT `StudentName` FROM `Student` WHERE `StudentNo` = (

SELECT `StudentNo` FROM `Result`

INNER JOIN `Subject` ON Result.SubjectNo= Subject.SubjectNo

WHERE StudentResult=60 AND SubjectName='Java Logic'

)

GO

1)一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换

2)子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据

3)表连接更适合于查看多表的数据

2.IN子查询

使用IN关键字可以使父查询匹配子查询返回多个字段值。

例:查询参加“Java Logic”课程最近一次考试的在读学生名单

第一步:获得Java Logic课程的课程编号

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic'

第二步:根据课程编号查询得到Java Logic课程最近一次的考试日期

SELECT MAX(ExamDate) FROM Result WHERE SubjectNo=(

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic' )

第三步:根据课程编号和最近一次的考试日期查询出在读学生信息

SELECT StudentNo, StudentName FROM Student

WHERE StudentNo  IN (

SELECT StudentNo FROM Result

WHERE SubjectNo IN (

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic'

) AND ExamDate = (

SELECT MAX(ExamDate) FROM Result

WHERE SubjectNo = (

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic'

)

)

)

3.NOT IN子查询

例:查询未参加“Java Logic”课程最近一次考试的在读学生名单

SELECT StudentNo, StudentName FROM Student

WHERE StudentNo  NOT IN (

SELECT StudentNo FROM Result

WHERE SubjectNo = (

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic'

)  AND ExamDate = (

SELECT MAX(ExamDate) FROM Result

WHERE SubjectNo = (

SELECT SubjectNo FROM Subject

WHERE SubjectName='Java Logic' ) ) )

AND GradeId = (

SELECT GradeId FROM Subject WHERE SubjectName = 'Java Logic'

)

六.总结

查询的方法有三种

联合——合并多个数据集中的行

子查询——将一个查询嵌套在另一个查询中

连接——合并多个数据表中的列

比较运算符后面的子查询只能返回单个数值

IN子查询后面可跟随返回多条记录的子查询,用于检测某列的值是否存在于某个范围中。

在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查。子查询可以出现在表达式出现的任何位置。

第三章 MySQL高级查询(一)的更多相关文章

  1. 第四章 MySQL高级查询(二)

    第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...

  2. accp8.0转换教材第4章MySQL高级查询(二)理解与练习

    知识点:EXISTS子查询.NOT EXISTS子查询.分页查询.UNION联合查询 一.单词部分 ①exist存在②temp临时的③district区域 ④content内容⑤temporary暂时 ...

  3. accp8.0转换教材第3章MySQL高级查询(一)理解与练习

    一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...

  4. MySQL高级查询与编程笔记 • 【目录】

    章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...

  5. MySQL 高级查询操作

    目录 MySQL 高级查询操作 一.预告 二.简单查询 三.显示筛选 四.存储过程 五.查询语句 1.作为变量 2.函数调用 3.写入数据表 备注 附表一 附表二 相关文献 博客提示 MySQL 高级 ...

  6. python进阶09 MySQL高级查询

    python进阶09 MySQL高级查询 一.筛选条件 # 比较运算符 # 等于:= 不等于:!= 或<> 大于:> 小于:< 大于等于>= 小于等于:<= #空: ...

  7. 第09章 MySQL子查询

    第09章 MySQL子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要 ...

  8. MySQL高级查询与编程作业目录 (作业笔记)

    MySQL高级查询与编程笔记 • [目录] 第1章 数据库设计原理与实战 >>> 第2章 数据定义和操作 >>> 2.1.4 使用 DDL 语句分别创建仓库表.供应 ...

  9. 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询

    本文内容: MySQL的基础查询语句 链接查询 联合查询 子查询 渗透测试常用函数 1,MySQL基础查询语句: select * from 表 order  by ASC/DESC; ASC:从小到 ...

随机推荐

  1. 1011. A+B和C (15)

    /*1011. A+B和C (15) 时间限制150 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者HOU, Qiming给定区间[-231, 231]内的3个整数A ...

  2. Tomca软件介绍和安装

    Web开发入门 软件的结构: C/S (Client - Server  客户端-服务器端) 典型应用:QQ软件 ,飞秋,红蜘蛛. 特点: 1)必须下载特定的客户端程序. 2)服务器端升级,客户端升级 ...

  3. 个人作业-2 英语学习APP分析

    产品: 必应词典 PC版 第一部分:调研,评测 1.对于这款产品的第一感觉是界面做的有点生硬粗糙,而且界面有种很空的感觉,界面美化做的不是很好,第一印象不是很喜欢.不过一点,就是把单词的近义词反义词放 ...

  4. 201521123091 《Java程序设计》第11周学习总结

    Java 第十一周总结 第十一周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...

  5. 【Alpha】——Seventh Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 将项目做成APK 用户界面改善 郑靖涛 协助设计账目一览表板块 用户界面改善 杨海亮 查询功能测试 用户界 ...

  6. 201521123070 《JAVA程序设计》第6周学习总结

    1. 本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  7. 201521123010 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  8. sscanf和正则表达式

    sscanf() - 从一个字符串中读进与指定格式相符的数据.      函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var ...

  9. Shiro第二篇【介绍Shiro、认证流程、自定义realm、自定义realm支持md5】

    什么是Shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和sp ...

  10. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...