MySql的DDL、DQL、DML三种语言小结
2020-07-12 17:18
155 查看
本人初学小结,不足和漏洞之处欢迎指出!
MySql的DDL、DQL、DML三种语言小结
- 1、函数
- 1、聚合函数
- 1.1、AVG() :用于求平均值
- 1.2、SUM() :用于求某列值总和值
- 1.3、MAX() :用于求某列最大值
- 1.4、MIN() :用于求某列 最小值
- 1.5、COUNT() :用于统计某列存在次数值
- 2.1、拼接函数:CONCAT()
- 2.2、大小写转换函数:UPPER(),LOWER()
- - 注意:以下语句中的下标从 1 开始计数**
- 2.3、替换函数:INSERT('被替换的字符串',开始替换的下标,替换结束的下标,'要替换的文字')
- 2.4、截取函数:SUBSTRING('要截取的字符串',开始截取得下标,要截取几个字符)
- 3.1、当前日期函数:CURDATE()
- 3.2、当前时间函数:CURTIME()
- 3.3、语句开始执行的时间函数:NOW()
- 3.4、年份函数: YEAR(NOW())
- 3.5、月份函数:MONTH(NOW())
- 3.6、日数函数:MONTH(NOW())
- 3.7、周期函数: WEEK(NOW())
- 示例:SELECT WEEK('2020-05-01') AS '传入日期(7天一周)是第几周';
- 3.8、小时函数:HOUR()
- 3.9、分钟函数:MINUTE()
- 3.10、日期差隔函数:DATEDIFF('startDate','endDate')
- 3.11、时间差隔函数:TIMEDIFF(start,end)
- 3.12、两日期时间差值据属性定义返回类型:TIMESTAMPDIFF(属性,end,start)
- 3.13、查询几天后的日期函数:ADDDATE('原日期',增加几天);
- 其他函数
- 3.14、睡眠函数:SLEEP( 睡眠时间(s) )
- 3.15、动态实时时间函数:SYSDATE()
DDL(数据库定义语言)
1、CREATE
字段列的属性
- 数据类型(数据长度)
- COMMENT 字段描述
- Not null 非空
- default 默认
- unsigned 无符号,无符号(0以上的)
- primary key (Key) 主键
- auto_increment 自增长(标识列)
- 注意无符号的被勾选了之后,zerofill也会自动勾选
- 空值有NULL和None之分:NULL占了空间但内容是空的,None没有内容也不占空间
创表
CREATE TABLE `table`( `id` INT(4) KEY COMMENT '编号' unsinged );
创库
CREATE DATABASE `mysqldatabase`;
2、DROP
删表
DROP TABLE `table`;
删库
DROP DATABASE `mysqldatabase`;
3、ALTER
修改表名
ALTER TABLE `test_DDL` RENAME `tb_DDL`;
添加列
ALTER TABLE `tb_DDL` ADD `jiu` INT(4) NOT NULL;
修改列类型
ALTER TABLE `tb_DDL` CHANGE `jiu` `jiu1` VARCHAR(4) NOT NULL;
删除列
ALTER TABLE `tb_DDL` DROP id;
添加索引
唯一索引
ALTER TABLE 'table_name' ADD UNIQUE(name);
全文索引
ALTER TABLE 'table_name' ADD FULLTEXT(name);
普通索引
ALTER TABLE 'table_name' ADD INDEX(name);
主外键约束
主键约束
创建语法:
ALTER TABLE 表名 ADD CONSTRAINT 主键约束名称 PRIMARY KEY 表名(表列名);
示例:
ALTER TABLE `student1` ADD CONSTRAINT `pk_st1_key` PRIMARY KEY student1(id);
联合主键
ALTER TABLE `student1` ADD CONSTRAINT `pk_st1_key` PRIMARY KEY (`id`,`name`);
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY ;
外键约束
创建语法:
ALTER TABLE 外表名 ADD CONSTRAINT 外键约束名称 FOREIGN KEY (外表列名) REFERENCES 主表名(主表列名);
示例:
ALTER TABLE student1 ADD CONSTRAINT `fk_student1_grade` FOREIGN KEY (gradeId) REFERENCES grade(id);
删除外键
ALTER TABLE 外表名 DROP FOREIGN KEY 外键约束名称;
示例
ALTER TABLE student1 DROP FOREIGN KEY `fk_student1_grade`;
注意:
- 1、引用的两个表列都要保持一致对应 1.1 数据类型和大小
- 1.2 主键和主键个数和列段
-
虽然可以随便取,但还是尽量遵照
主键 pk_表名_主键字段
外键 fk_外表名_主表名
DML(数据库操作语言)
CREATE TABLE `student1` ( `gradeId` int(4) NOT NULL COMMENT '编号', `name` varchar(20) NOT NULL COMMENT '姓名', `age` int(3) NOT NULL DEFAULT '18', PRIMARY KEY (`gradeId`) )
1、INSERT
向表插入数据
通用语法
INSERT INTO 表名 VALUE (表列1的值,表列2的值,表列3的值,...);
示例
单条
INSERT INTO student1 VALUE (0,'zhangsan',18);
多条
INSERT INTO student1 VALUE (0,'张三',18),(1,'李四',19),(3,'王二',20),(4,'麻子',21);
2、UPDATE
更新数据
通用语法
UPDATE 表名 SET 列名新制 WHERE 限制条件;
示例
单个列段
UPDATE student1 SET age = 22 WHERE NAME = '张三';
多个列段
UPDATE student1 SET age = 22,name = '张三1' WHERE NAME = '张三';
3、DELETE
删除表数据
通用语法
- 第一种 :可加条件删除
DELETE FROM 表名 WHERE 删除条件;
- 第二种:清空表中全部数据
TRUNCATE TABLE 表名;
示例
- 第一种
DELETE FROM student1 WHERE gradeId = 0;
- 第二种
TRUNCATE TABLE student1;
两者区别
- TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
- 站外扩展参考
https://www.cnblogs.com/zjoch/p/4002138.html
DQL(数据库查询语言)
1、函数
1、聚合函数
- 总体概述:除统计函数不忽略空值字段,其他均忽略, 统计函数除了可统计某一具体字段出现的次数。还可以使用 * 统计全表有多少行数据
1.1、AVG() :用于求平均值
1.2、SUM() :用于求某列值总和值
1.3、MAX() :用于求某列最大值
1.4、MIN() :用于求某列 最小值
1.5、COUNT() :用于统计某列存在次数值
2、字符串函数
2.1、拼接函数:CONCAT()
- 示例:CONCAT(‘字符串1’,‘字符串2’,‘字符串3’,’…’,‘字符串n’);
- 运行结果:字符串1字符串2字符串3…字符串n
2.2、大小写转换函数:UPPER(),LOWER()
- 示例:SELECT UPPER(‘MySql’) AS
大写
,LOWER(‘MySql’)AS小写
; - 运行结果:MYSQL mysql
- 注意:以下语句中的下标从 1 开始计数**
2.3、替换函数:INSERT(‘被替换的字符串’,开始替换的下标,替换结束的下标,‘要替换的文字’)
- 示例:SELECT INSERT (‘这是SQL Server数据库’,3,10,‘这是MySql数据库’) AS
替换结果
; - 运行结果:这是这是MySql数据库数据库
2.4、截取函数:SUBSTRING(‘要截取的字符串’,开始截取得下标,要截取几个字符)
- 示例:SELECT SUBSTRING(‘JavaMySqlOracle’,5,5);
- 运行结果:MySql
3、日期时间函数
通用语法:SELECT 时间日期函数名();
3.1、当前日期函数:CURDATE()
- 示例:SELECT CURDATE() AS
当前日期
;
3.2、当前时间函数:CURTIME()
- 示例:SELECT CURTIME() AS
当前时间
;
3.3、语句开始执行的时间函数:NOW()
-
示例:SELECT NOW() AS
当前日期和时间
; -
通用语法:SELECT 下列函数名(‘传入日期时间’); 或者 SELECT 下列函数名(NOW()) ;
3.4、年份函数: YEAR(NOW())
示例:SELECT YEAR('2017-09-11 11:00:00')AS '传入时间的年份';
3.5、月份函数:MONTH(NOW())
示例:SELECT MONTH(NOW()) AS '传入时间的月份';
3.6、日数函数:MONTH(NOW())
示例:SELECT DAY('2017-09-11 11:00:00') AS '传入时间的日数';
3.7、周期函数: WEEK(NOW())
示例:SELECT WEEK(‘2020-05-01’) AS ‘传入日期(7天一周)是第几周’;
3.8、小时函数:HOUR()
示例:SELECT HOUR(NOW()) AS '传入时间的小时数';
3.9、分钟函数:MINUTE()
示例:SELECT MINUTE(NOW()) AS '传入时间的分钟数';
3.10、日期差隔函数:DATEDIFF(‘startDate’,‘endDate’)
示例:SELECT DATEDIFF(NOW(),'2008-8-8')AS '两个传入时间的天数差';
3.11、时间差隔函数:TIMEDIFF(start,end)
注意可传入的可以是日期也可以是时间,返回是 00:00:00的格式 示例:SELECT TIMEDIFF('04:40','04:30'); 结果:00:10:00 示例:SELECT TIMEDIFF('2020-05-01 12:00:00','2020-05-01 10:00:00') 结果:02:00:00
3.12、两日期时间差值据属性定义返回类型:TIMESTAMPDIFF(属性,end,start)
- 年 YEAR
- 月 MONTH
- 日 DAY
- 周 WEEK
- 季度 QUARTER
- 小时 HOUR
- 分钟 MINUTE
- 秒 SECOND
- 毫秒 FRAC_SECOND
- 示例:SELECT TIMESTAMPDIFF(HOUR,‘2020-05-01 10:00:00’,‘2020-05-01 12:00:00’);
- 结果:2
- 其他补充参考外站:
https://blog.csdn.net/zmxiangde_88/article/details/8011661
3.13、查询几天后的日期函数:ADDDATE(‘原日期’,增加几天);
- 示例:SELECT ADDDATE(NOW(),5) AS ‘几天后的日期’;
其他函数
3.14、睡眠函数:SLEEP( 睡眠时间(s) )- 示例:SELECT SLEEP(3);
- 示例:SELECT SYSDATE();
4、数学函数
4.1、CELL(X) 返回大于或等于数值X的最小整数函数
- 示例:SELECT CELL(2,3);
- 结果:返回 3
4.2、FLOOR(X) 返回小于或等于数值X的最小整数函数
- 示例:SELECT FLOOR(2,3);
- 结果:返回 2
4.3、RAND() 返回0~1间的随机小数
- 示例:SELECT RAND();
- 结果:返回 0.5525468583708134
5、辨析 NOW() 与 SYSDATE()
- 示例:SELECT NOW(),SYSDATE(); 结果:2020-05-01 11:38:09,2020-05-01 11:38:09
- 初看结果两者好像一样,但两个是有不同的,前者是语句开始执行时的时间,后者时当前系统实时时间
我们可以采用 随眠函数来检验下
-
SELECT
NOW(),
SYSDATE(),
SLEEP(3),
NOW(),
SYSDATE();
-
2020-05-01 11:41:57
2020-05-01 11:41:57
0
2020-05-01 11:41:57
2020-05-01 11:42:00
其他扩展参考外网:
https://www.cnblogs.com/pcheng/p/6004679.html
2、SELECT
2.1、条件查询 WHERE
单值查询
SELECT * FROM 表名 WHERE 查询条件;
多值查询
SELECT * FROM 表名 WHERE in 查询条件;
查询条件说明
- 大小:>、<、>=、<=、!=等多种比较运算符,
- 连接:AND OR NOT 等逻辑运算符
- 大范围限制:BETWEEN…AND…闭区间(左右都取等号)
LIKE查询:
精准查询 ‘确认值’,’_’
SELECT * FROM 表名 WHERE 表列名 LIKE '表列值'
或 _
- 张姓(限制2个字的名字)
SELECT * FROM student1 AS a WHERE a.name LIKE '张_'
模糊查询 % [] [^]
- 张姓(不限字符长)
SELECT * FROM student1 AS a WHERE a.name LIKE '张%'
- 以 133、137 开头或中间包含的号码
SELECT * FROM grade AS b WHERE b.phone LIKE '%13[3,7]%';
- [^] 则不包含以 133、137 开头或中间包含的号码
SELECT * FROM grade AS b WHERE b.phone LIKE '%13[^3,7]%';
2.2、排序查询 ORDER BY
- 排序参数 [DESC(倒序),ASC(正序)]
SELECT * FROM 表名 ORDER BY 排序参数;
2.3、限制查询 LIMIT
- 限制参数 1、单参 前几条数据
- 2、双参 数据开始显示下标,显示几条数据
SELECT * FROM 表名 LIMIT 限制参数;
2.4、函数查询
SELECT 函数名(字段名) FROM 表名;
2.5、分组查询
- 有几组则有几行
- 分组条件 可填函数||可填普通值判定条件
SELECT * FROM 表名 GROUP BY 表列名 HAVING 分组条件;
2.6、连接查询
- 参数1 in [ 不填(直接内联) | LEFT(左联,左表为主) | RIGHT(右联,右表为主) ]
INNER 参数1 JOIN 表名2 ON 连接条件
2.7、子查询类
2.7.1、子查询
- 以另一个查询结果作为查询条件
- 示例:
SELECT a.age FROM student1 AS a WHERE a.gradeId = (SELECT a.gradeId FROM student1 AS a WHERE a.name = '张三1' );
2.7.2、IN子查询
- 子查询返回不止1个值时,采用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 );
2.7.3、NOT IN 子查询
- 查询不在返回多个值的情况
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') ) )……
2.7.4、EXISTS子查询
2.8、联合查询
- 把多个查询结果合并起来
- 列名总显示第一个查询语句列名,默认清除重复项,union all不去重
SELECT * FROM student1 UNION SELECT * FROM grade
- 结果:
3、全查询各语句顺序
语法:
SELECT * FROM 表名1 INNER 参数1 JOIN 表名2 ON 连接条件WHERE 条件 GROUP BY 列字段 HAVING 分组条件 ORDER BY 列字段 序参数 LIMIT 参数;
示例:
创表赋值
# 创建 student 表 CREATE TABLE `student` ( `gradeId` int(4) NOT NULL COMMENT '编号', `name` varchar(20) NOT NULL COMMENT '姓名', `age` int(3) NOT NULL DEFAULT '18', PRIMARY KEY (`gradeId`) ) INSERT INTO student VALUE (0,'张三',18),(1,'李四',21),(2,'王二',18),(3,'麻子',21) # 创建 grade 表 CREATE TABLE `grade` ( `id` int(4) NOT NULL COMMENT '编号', `address` varchar(50) NOT NULL DEFAULT '暂不方便透露' COMMENT '地址', `phone` varchar(100) NOT NULL DEFAULT '暂不方便透露' COMMENT '号码', KEY `fk_st_grade` (`id`) ); INSERT INTO grade VALUE (1,'长沙','13312345678'),(2,'长沙2','13712345678'),(3,'长沙3','13912345678'),
示范:
SELECT a.gradeId,a.name,a.age,b.address,b.phone FROM student AS a INNER JOIN grade AS b ON a.gradeId = b.id WHERE age > 18 GROUP BY a.gradeId HAVING SUM(a.age) > 10 ORDER BY a.age DESC LIMIT 0,3;
结果:
复习日期:2020/04/30
完成时间:2020/05/04
其他扩展参考外网:
https://www.cnblogs.com/songyifan427/p/10078467.html
相关文章推荐
- JAVAWEB开发之数据库简介、MySQL的安装与卸载(处理中文乱码)、以及MySQL语言(DDL、DML、DCL、DQL)的详解和使用
- MySQL的DDL、DML、DQL语句和单表曾、删、改、查实验
- 关系数据库的语言 DQL/DML/DDL/DCL/TCL
- 第一天,Mysql安装,DDL(数据库定义语言),DBA,DML(数据库操纵语言),导入外面的sql文件
- 数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
- MySql用statement实现DDL,DML,DQL的操作Demo
- DCL、DDL、DML三种数据库语言的概述及区分方式
- MySQL中的DDL、DML、DCL、DQL
- MySQL之DDL,DQL,DML,DCL
- MySQL入门操作和常规DML、DDL、DQL使用
- MySQL基础 DDL,DML,DQL,DCL --小丑
- 初识MySQL(一)安装MySQL,SQL介绍以及DDL,DML,DQL基本用法。
- PL/SQL语言中的execute immediate 命令只能用于DDL语句的执行,对于DML和DQL语句却不能实际执行
- 数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL
- 数据库基础--SQL 语言(DQL、DDL、DML、DCL)
- DQL,DML,DDL,DCL语言
- SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。
- 数据库DML、DDL、DCL三种语言的区别与联系
- MySQL基础知识——(DDL、DML、DQL、DCL)
- MySQL常用DDL、DML、DCL语言整理(附样例)