一、MySQL中的DML语句

  1、使用insert插入数据记录:

INSERT INTO `myschool`.`student`
(`studentNo`, `loginPwd`, `studentName`, `sex`, `gradeId`, `phone`, `address`, `birthday`)
VALUES ('', '', '唐川普', '男', '', '', '美国纽约', '1900-01-01'); INSERT INTO student (studentNo,loginPwd,studentName,sex,gradeId,phone,address,birthday)
  VALUES ('', '', '江长者', '男', '', '', '中国上海', '1900-01-01'); /*数据库名、表名、字段名都可以不用``标识*/
/*varchar、data型字段,必须用''单引号标识*/
/*int型字段,加不加单引号都没关系*/ /*插入多行数据*/
INSERT INTO student (studentNo,loginPwd,studentName,sex,gradeId,phone,address,birthday)
  VALUES
('', '', '江长者', '男', '', '', '中国上海', '1900-01-01'),
('', '', '唐川普', '男', '', '', '美国纽约', '1900-01-01'); /*推荐在插入数据时指定具体的字段名,更稳定安全*/
/*也可以把查询结果直接用来创建新表*/
create table phoneList(select studentName,phone from student);

  2、使用update更新数据记录

/*语法*/
update tableName set colum1=xxx,colum2=xxx [where ...] /*例子*/
/*set用来筛选列,where用来筛选行*/
update student set loginPwd='',address='湖南邵阳' where studentName='李酸村';

  3、使用delete、truncate table删除数据记录

/*使用delete,它后面不跟列名*/
/*注意约束*/
delete from student where studentNo=10; /*使用truncate table删除所有行*/
/*执行速度更快,使用的系统资源和事务日志资源更少,不能用于有外键约束的表*/
/*实际工作中,不推荐此方式,因为不能恢复*/
truncate table student;

  4、select语句

  SELECT——筛选列;WHERE——筛选行;

  DISTINCT,让单个列下的不同记录只出现一次。

  查询使用别名(select colum as xxx):

select [DISTINCT]studentNo as 学生编号 from student where address='湖南';

  查询空值(is null、is not null):

select studentName where email is null;

  查询中使用常量列:在select后面跟一个常量,对列进行筛选。  

  5、LIMIT子句:

/*语法*/
/*显示结果集中指定位置的指定行数*/
select * from student [limit [位置偏移量],行数]; /*从结果中的第5条开始显示,每次显示4条*/
select * from student limit 4,4;

  6、对查询结果排序

  6.1 对单列排序

  在select语句后添加“order by <colum_name>”,就可以以该列的排序结果,显示整个查询结果,默认是升序,即“ASC”(此时null值最前)。若要降序排列,添加关键字“DESC”就好(此时null值最后)。

/*以宠物的出生日期排序*/
select name,owner,birth from pet order by birth desc;

  对字符类型的列排序,MySQL默认是忽略大小写的。如果需要区分大小写,在选择的列名面前添加“BINARY”:

/*以宠物的名字排序,比较时区分大小写(这里并无意义),升序排列*/
select name,birth from pet order by binary name ASC;

  6.2 对多列排序

/*对整个结果先以species升序(默认)排序*/
/*相同的species结果中,以birth降序排列*/
/*值得注意的是,DESC只影响到birth*/
SELECT name, species, birth FROM pet ORDER BY species, birth DESC;

  7、总结select的模式:

select <字段列表> from <表名或者视图>
[where <查询条件>]
[group by <分组的字段名>]
[order by [binary] <排序的列名>] [ASC|DESC]
[limit [位置偏移量],行数];

  8、常用函数分类:聚合函数、字符串函数、时间日期函数、数学函数

  日期计算:

/*根据宠物的出生日期(birth)计算年龄*/
/*timestampdiff()函数需要两个date类型的数据作为参数*/
SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet;

  结果:

  假如,有一列记录宠物的死亡日期,death,那我们可以根据这一列是否为null,列出已经死亡的宠物,以及年龄:

/*null是一个特别的值,无法用算术比较符进行比较*/
SELECT name, birth, death,
TIMESTAMPDIFF(YEAR,birth,death) AS age
FROM pet WHERE death IS NOT NULL ORDER BY age;

  结果如下:

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

  1、简单子查询

  例如,查看年龄比“李斯文”小的学生。

  分析:先查出“李斯文”的出生日期;然后,利用where语句筛选出生日期比“李斯文”大的学生

SELECT studentNo,studentName,sex,birthday,address FROM student
  WHERE birthday>(SELECT birthday FROM student WHERE studentName='李斯文');

  这里,括号内的子查询返回的是李斯文的生日:1993-07-23——一个DATA类型的数据。

  子查询使用的比较运算符有>、=、<、>=、<=,执行时,先执行子查询,返回值;再执行整个父查询,返回最后结果。(比较运算符后面的子查询只能返回单个数值)

  子查询作为WHERE条件的一部分,还可以和UPDATE、INSERT、DELETE一起使用。

  建议在编写查询语句时,直接指定要显示的列名,而不是用*,因为后者占用的资源大,可维护性低。

  2、使用子查询在多表间查询符合条件的数据

  例如,查询Logic Java课程至少一次考试刚好等于60分的学生名单。

  分析:

  (1)查询subject表,获得课程的课程ID;

  (2)根据课程ID,查询result表中成绩是60分的学生的编号;

  (3)根据,学号,查询student表得到学生姓名;

select studentName from student where studentNo=
(select studentNo from result
inner join Subject on result.subjectNo=subject.subjectNo
where studentResult=60 and subjectName='Logic Java');

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

  现在,有多个学生的Logic Java课程考试成绩为60分,采用简单的子查询就会出现编译错误“Subquery returns more than 1 row”,即子查询返回值不唯一。

  现在使用IN子查询:

select studentName from student
where studentNo IN
(select studentNo from result where subjectNo =
(select subjectNo from subject where subjectName ='Logic Java')
AND studentResult = 60);

  另一个梨例子,查询参加Logic Java课程最近一次考试的在读学生名单(四层嵌套):

  (1)获得课程编号;

  (2)根据课程编号得到最近的一次课程考试日期;

  (3)根据课程编号和最近一次的考试日期查询学生信息;

SELECT studentNo,studentName FROM student where studentNo
IN(
select studentNo from result where subjectNo=
(select subjectNo from subject where subjectName='Logic Java')
AND examDate=
(select MAX(examDate) from result where subjectNo=
(select subjectNo from subject where subjectName='Logic Java')
)
);

  4、NOT IN查询

  如何查询得到没有参加Logic Java课程最近一次考试的在读学生名单?

SELECT studentNo,studentName FROM student where studentNo
NOT IN(
select studentNo from result where subjectNo=
(select subjectNo from subject where subjectName='Logic Java')
AND examDate=
(select MAX(examDate) from result where subjectNo=
(select subjectNo from subject where subjectName='Logic Java')
)
)AND gradeID=(...);

  还可以在NOT IN的条件外继续AND() 添加条件~~

  5、NULL值的使用

  上面提到了NULL值在升序和降序排列中的表现。但是是group by语句下,NULL值则被视为相等。

  而且对于一个NOT NULL限制下的列,是可以插入“0”或者空字符的。

MySQL中的DML、DQL和子查询的更多相关文章

  1. mysql中多个left join子查询写法以及别名用法

    不多说 直接上语句   SELECT     a.id,     a.thumbNail,     a. NAME,     a.marketPrice,     a.memberPrice,     ...

  2. mysql中的union用法以及子查询综合应用

    union查询就是把2条或者多条sql语句的查询结果,合并成一个结果集. 如:sql1: N行,sql2: M行,sql1 union sql2 ---> N+M行 1.能否从2张表查询再uni ...

  3. mysql 中语句执行的顺序以及查询处理阶段的分析

    原文链接:http://www.php.cn/mysql-tutorials-408865.html 本篇文章给大家带来的内容是关于mysql中语句执行的顺序以及查询处理阶段的分析,有一定的参考价值, ...

  4. MySQL中基本的多表连接查询教程

    一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOIN ...

  5. MySQL(18):Select- subquery子查询

    1. Select- subquery子查询 子查询:是将一条查询语句嵌套在另一条查询语句之中. 2. 案例 需求:查询获得代课天数最多的那个老师的信息. 思路:先获得最多的代课天数是多少天,然后再判 ...

  6. MySQL学习笔记(五)—— 子查询及联结

    子查询: 子查询,即嵌套在其他查询中的查询.例如我们有这样几个表,顾客表,订单表,商品表,我们想知道有哪些客户买了商品A,那么我们就需要先查看哪些订单里包含了商品A,然后根据订单查出是哪些客户. my ...

  7. mysql中slow query log慢日志查询分析

    在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...

  8. mysql 的delete from 和update子查询限制

    最经做项目时发现的问题,好像在update时也有... 网上查到的资料如下: 1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误. ...

  9. 关于T-SQL中exists或者not exists子查询的“伪优化”的做法

    问题起源 在使用t-sql中的exists(或者not exists)子查询的时候,不知道什么时候开始,发现一小部分人存在一种“伪优化”的一些做法,并且向不明真相的群众传递这一种写法“优越性”,实在看 ...

随机推荐

  1. CORS和jsonp实现跨域请求

    同源策略:所谓同源是指,域名,协议,端口相同,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略.当浏览器同时打开两个tab页面(两个不同服务器 ...

  2. linux安装jdk1.8之后报错Error: dl failure on line 893的解决办法

    问题描述:安装jdk1.8之后,输入java -version查看安装是否成功之后,报错:   报错如下: Error: dl failure on line 893 Error: failed /u ...

  3. NetUtils网络连接工具类

    import android.app.Activity; import android.content.ComponentName; import android.content.Context; i ...

  4. Sqlite轻量级数据库

     SQLite,是一款轻量型的数据库,是遵守ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式开发中. SQLite的数据类型:Typelessness(无类型), 可以保 ...

  5. python函数的执行过程

    对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束 ...

  6. 几句简单的python代码完成周公解梦功能

    <周公解梦>是靠人的梦来卜吉凶的一本于民间流传的解梦书籍,共有七类梦境的解述.这是非常传统的中国文化体系的一部分,但是如何用代码来获取并搜索周公解梦的数据呢?一般情况下,要通过爬虫获取数据 ...

  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-3.登录检验JWT实战之封装通用方法

    笔记 3.登录检验JWT实战之封装通用方法     讲解:引入相关依赖并开发JWT工具类 1.加入相关依赖 <!-- JWT相关 -->             <dependenc ...

  8. java(SSM)上传文件到七牛云(对象存储)

    项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...

  9. UITableView+FDTemplateLayoutCell计算行高显示<二>

    之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...

  10. robotframework 接口测试 +RSA 加密

    首先,实现RSA加密,需要用到pycrypto这个库,这个库又依赖openssl,所以需要先下载openssl,具体教程可以参考http://bbs.csdn.net/topics/392193545 ...