Mysql中的子查询等操作

1.delete和truncate 区别?
1.1 delete慢 ,Truncate快

1.20delete记录日志,所以慢 truncate不记录日志

1.31 删除所有记录后,主键值delete 不是从1编号,Truncate会从1开始编号

1.43 truncate不能删除有外键的主表

1.5 delete 可以 加where ,删除部分记录

2.两种引擎
InnoDB:支持事务
MyISAM:

3.添加 insert into grade(字段名称) values(对应)
修改 update 表名 set 列名=‘新值’ where 主键=xxxx
删除 delete from 表名 where 主键=yyy

4. 5种约束
检查约束
主键约束
外键约束
非空约束
默认值约束
唯一约束

1.两种一次性向表中进N条记录的方案
方案一:
要求:目标表不存在
create table 新表(select * from student)

方案二:
要求:目标表必须存在
insert into 新表的名称 select * from 原始表
2.简单查询 关于*会引起全表扫描问题

3.查找姓名是“微冷的雨”的信息
SELECT * FROM student
WHERE studentName=‘微冷的雨‘

4.注意事项
--01.SQL关键字不区分大小写

--02.字符串和日期类型都需要[[[[[[单引号]]]]

--03.起表名的时候,千万不要起得太好,例如不要使用User作为表名。
-- 如果表名和关键字重复了,我们可以通过``取消转义。
select * from `User`

--04.千万注意新建查询窗口中的中文空格。
select * from Message
5.别名
别名方案 AS
6.常量列
SELECT *,‘汉族‘AS 民族 FROM student
7.关于null讲解
必须懂

8.聚合函数
count:统计一张表中总共有多少条数据
select SUM(StudentResult) as 总分 from Result
select AVG(studentresult) as 平均分 from Result
select MAX(studentresult) as 最高分 from Result
select min(studentresult) as 最高分 from Result
9。常用函数
9.1字符串函数
9.2日期时间函数
9.3数学函数
10.Order
11.排序 limit

代码

##检索所有邮箱为NULL的学生
SELECT * FROM student WHERE email
##如果说有一条记录真实值 ‘xxx‘ 你如何锁定
###统计成绩表中有几条记录?
SELECT SUM(studentresult) FROM result
##字符串函数
SELECT UPPER(‘ABCd明天是周五 ,注意提交演讲稿‘)
###截取
SELECT SUBSTRING(‘T14正在讲解MySQL,结束后有一个考试‘,8,5)
###字符串拼接
SELECT CONCAT(‘str1‘,‘str2‘,‘str3‘)
###替换函数
SELECT INSERT(‘这是MySQL数据库‘,3,5,‘Oracle‘)
###在mYSQL获取默认的时间
SELECT NOW()
####只获取系统的日期,不获取时间
SELECT CURDATE()
#####只获取系统时间
SELECT CURTIME()
###获取当前日期是该年中的第几周?
SELECT WEEK(NOW())
###查看强哥已经活了多少天
SELECT DATEDIFF(NOW(),‘1992-06-01‘)
###SQL标准 SQL 99
SELECT ADDDATE(NOW(),-3)

####数学函数 ceil() 天花板 向上取整 floor() 向下取整 rand()随机数

SELECT CEIL(2.0001)

####Order by 排序的依据字段
SELECT * FROM student ORDER BY sex,borndate DESC

###分页 limit 参数一(该页数据从第几条开始,下标从0开始),参数2(页大小/每页显示记录数)
SELECT * FROM student LIMIT 2,2
###练习
###1.查询2016年2月17日考试前5名的学员的学号和分数
SELECT studentno,studentresult
FROM result
WHERE examdate>=‘2017-07-13‘ AND examdate<‘2017-07-14‘
ORDER BY studentresult DESC LIMIT 5
SELECT * FROM result
###2.将所有女学生按年龄从大到小排序,从第2条记录开始显示6名女学生的姓名、年龄、出生日期、手机号信息
SELECT studentname,CEIL(DATEDIFF(NOW(),borndate)/365) AS 年龄,borndate,phone
FROM student
WHERE sex=‘男‘
ORDER BY 年龄 DESC
LIMIT 1,6

###3.查询参加2016年2月17日考试的所有学员的最高分、最低分、平均分
SELECT MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分,AVG(studentresult) AS 平均分
FROM result
WHERE examdate>=‘2017-7-13‘ AND examdate<‘2017-7-14‘

SELECT * FROM result

###子查询 必须知道什么是子查询 select * from (子查询)
###年龄比彪哥小的学生信息
SELECT * FROM student WHERE bornDate<(SELECT borndate FROM student WHERE studentname=‘彪哥‘)

##查询参加 最近一次 Logic Java 考试成绩的学生的最高分和最低分
SELECT MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分
FROM result
WHERE examdate=(SELECT MAX(examdate) FROM result WHERE subjectid=(SELECT subjectid FROM SUBJECT WHERE subjectname=‘语文‘))
AND subjectid=(SELECT subjectid FROM SUBJECT WHERE subjectname=‘语文‘)

###查询 JavaLogic 考试成绩为 60分的学生姓名
SELECT studentname FROM student
WHERE studentno IN
(
SELECT studentno FROM result
WHERE studentresult=77
AND subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
)
SELECT * FROM result
####查询 最近一次 未参加 语文 考试的 学生名单(studentname)
SELECT studentname FROM student
WHERE studentno NOT IN
(
SELECT studentno FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
) AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
)
)
AND gradeid=
(
SELECT gradeid FROM SUBJECT
WHERE subjectname=‘语文‘
)

##检查“Logic Java”课程最近一次考试成绩
##如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数
SELECT studentno,studentresult FROM result
WHERE EXISTS
(
SELECT * FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
)
AND studentresult>80

)
AND subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname=‘语文‘
)
)
AND studentresult>60
ORDER BY studentresult DESC
LIMIT 5

SELECT * FROM student
WHERE EXISTS
(
SELECT * FROM result WHERE studentresult>100
)

时间: 2024-08-02 10:54:07

Mysql中的子查询等操作的相关文章

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

详细讲述MySQL中的子查询操作 (来自脚本之家)

继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE table1 (   customer_id VARCHAR(10) NOT NULL,   city VARCHAR(10) NOT NULL,   PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CH

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su

MySQL里面的子查询

一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:distinct. group by.order by.limit.join和union等:但是对应的外部查询必须是以下语句之一:select.insert.update.delete.set或 者do. 子查询的位置: select 中.from 后.where 中.group by 和order by

mysql中的模糊查询

转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词). 第一种是标准的SQL模式匹配.它有2种通配符:“_”和“%”.“_”匹配任意单个字符,而“%”匹配任意多个字符(包括0个).举例如下: SELECT * FROM table_name WHERE column_name LIKE ‘m%’; #查询

子查询一(WHERE中的子查询)

子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念. 子查询返回结果子查询可以返回的数据类型一共分为四种: 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据: 单行多列:返回一行数据中多个列的内容: 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围: 多行多列:查询返回的结果是一张临时表: 在WHERE子句中使用子查询 在WHERE子句之中处理单行单列子查询.多行单列子查询.单行

MySQL中数据表的查操作

查询数据表的全部内容 mysql> show tables;#查看当前数据库下的所有表 +--------------------+ | Tables_in_ceshi_ku | +--------------------+ | biao | | ceshi_biao | +--------------------+ 2 rows in set (0.00 sec) mysql> select * from biao;#查看该表所有的内容,*代表通配符,在这里是代表所有的列 +------+-

在 SQL Server 数据库的 WHERE 语句中使用子查询

这是关于子查询语句的一系列文章中的第三篇.在这篇文章中我们将讨论WHERE语句中的子查询语句.其他的文章讨论了其他语句中的子查询语句. 本次课程中的所有例子都是基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库的.读者可以阅读我的SQL Server使用入门学习使用这些免费的工具. 在WHERE语句中使用子查询 在WHERE语句中使用子查询是非常常见的.常见的用法是用EXISTS或IN测试存在性.在某些情况下重新考虑查询语

MySql数据库之子查询和高级应用

MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源. 代码案例如下: 例1. 查询大于平均年龄的学生: select * from students where age > (select avg(age) from students); 例2. 查询学生在班的所有班级名字: select name from classes where id in (select cls_id from students where