200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > MySQL语句——DDL DML DQL

MySQL语句——DDL DML DQL

时间:2024-05-10 03:01:57

相关推荐

MySQL语句——DDL DML DQL

第一章 DDL语句

第01节 操作数据库

1、创建数据库

简单的创建语法

-- 语法格式:CREATE DATABASE 数据库的名称;-- 案例代码: 创建了一个数据库,数据库的名称叫做 mydb02CREATE DATABASE mydb02;

完整的创建语法

-- 语法格式CREATE DATABASE IF NOT EXISTS 数据库的名称 CHARACTER SET 数据库使用的字符集; -- 案例代码:创建一个数据库,指定数据库的名称叫做 mydb03 指定数据库使用的字符集是 utf8 如果不存在则创建CREATE DATABASE IF NOT EXISTS mydb03 CHARACTER SET utf8;

2、删除数据库

简单的删除数据库的语法

-- 语法格式:DROP DATABASE 数据库名称;-- 案例代码: 删除数据库 mydb02 表示数据库的名称DROP DATABASE mydb02;

完整的删除数据库的语法

-- 语法格式:DROP DATABASE IF EXISTS 数据库名称; -- 案例代码:删除数据库 mydb03 如果不存在,则删除。DROP DATABASE IF EXISTS mydb03;

3、修改数据库

修改数据库的字符集

-- 语法格式:ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;-- 案例代码: 修改数据库 mydb03 的字符集为gbk格式ALTER DATABASE mydb03 CHARACTER SET gbk;

4、查询数据库

查询数据库的字符集

-- 语法格式:SHOW CREATE DATABASE 数据库名称;-- 案例代码:查看数据库 mydb03 的创建语句,查看的过程当中,可以看到字符集SHOW CREATE DATABASE mydb03;

查看当前正在使用的数据库

-- 语法格式: 在DATABASE和小括号中间,可以不用打空格SELECT DATABASE();-- 案例代码: 查看当前正在使用的数据库SELECT DATABASE();

5、使用数据库

使用数据库或者切换数据库

-- 语法格式USE 数据库名称;-- 案例代码: mydb03是数据库的名称USE mydb03;

第02节 操作数据表

1、创建数据表

简单的建表格式

-- 语法格式CREATE TABLE 表名称(列名1 数据类型1,列名2 数据类型2,列名3 数据类型3);-- 案例代码 student_one 表名称CREATE TABLE student_one(id INT,NAME VARCHAR(20),age INT);

完整的建表格式

-- 语法格式CREATE TABLE IF NOT EXISTS 表名称(列名1 数据类型1 约束类型,列名2 数据类型2 约束类型,列名3 数据类型3 约束类型) ENGINE=存储引擎;-- 案例代码 完整格式写法CREATE TABLE IF NOT EXISTS student_two(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,age INT NOT NULL) ENGINE=INNODB;

2、删除数据表

简单的删除表格式

-- 语法格式DROP TABLE 表名称;-- 案例代码 简写格式 student_one 是数据表的名称DROP TABLE student_one;

完整的删除表格式

-- 语法格式DROP TABLE IF EXISTS 表名称;-- 案例代码 完整格式,存在表 则删除DROP TABLE IF EXISTS student_two;

3、修改数据表

修改表名称

-- 语法格式ALTER TABLE 旧的表名称 RENAME TO 新的表名称;-- 案例代码:修改表名称的操作ALTER TABLE student_one RENAME TO student_1;

修改表的字符集

-- 语法格式ALTER TABLE 表名称 CHARACTER SET 字符集;-- 案例代码: 修改表 student_1 的字符集 gbkALTER TABLE student_1 CHARACTER SET gbk;

修改表,添加新的列

-- 语法格式ALTER TABLE 表名称 ADD 列名称 列的数据类型;-- 案例代码: 修改表,添加新的一列,添加性别 genderALTER TABLE student_1 ADD gender VARCHAR(20);

修改表,修改列的数据类型

-- 语法格式ALTER TABLE 表名称 MODIFY 列名称 列的数据类型;-- 案例代码: 修改表,修改表所在列的数据类型,性别gender 修改为INT ALTER TABLE student_1 MODIFY gender INT;

修改表,修改列名称和数据类型

-- 语法格式ALTER TABLE 表名称 CHANGE 旧的列名称 新的列名称 新的列数据类型;-- 案例代码:修改表,将旧的列性别 gender 修改成为 sex VARCHAR(20)ALTER TABLE student_1 CHANGE gender sex VARCHAR(20);

修改表,删除表当中某一列

-- 语法格式ALTER TABLE 表名称 DROP 列名称;-- 案例代码: 修改表,删除表当中的某一列,删除表 student_1 的 sex这列ALTER TABLE student_1 DROP sex;

4、查询数据表

查看数据库当中,所有表的信息

-- 语法格式:SHOW TABLES;-- 案例代码: 查询当前数据库当中,所有的表名称SHOW TABLES;

查询数据库当中,单独的某个表的表结构,每一列的列名、约束、数据类型、信息

-- 语法格式DESC 表名称;-- 案例代码:查询某个表的表结构,student_1 表结构DESC student_1;

查询数据库当中,表的存储引擎,数据容量,创建时间等

-- 语法格式SHOW TABLE STATUS FROM 数据库名称 LIKE '表名称';-- 案例代码:查询数据库mydb03当中, student_1 表的存储引擎,数据容量,创建时间等SHOW TABLE STATUS FROM mydb03 LIKE 'student_1';

第03节 数据类型

1、数值类型

1. 整数精确值(精确值)INTEGERINTBIGINT2. 定点类型(精确值)DECIMALNUMERIC3. 浮点数(近似值)FLOATDOUBLE4. 位类型(如果用于文件的存储,将一个.png格式的文件,上传到数据库保存)BIT

案例代码(研究小数类型的问题)

-- 1. 删除表,如果表存在,则删除表DROP TABLE IF EXISTS student_three;-- 2. 创建表,包括有浮点数参与进来CREATE TABLE IF NOT EXISTS student_three(id INT,chinese INTEGER,math DECIMAL,english FLOAT(3,1),computer DOUBLE(3,1));-- 3. 查询表结构DESC student_three;-- 4. 插入部分数据INSERT INTO student_three VALUES (1,30,40,100,100); INSERT INTO student_three VALUES (2,30,40,99.1,100);INSERT INTO student_three VALUES (3,30,40,99.1,99.1);INSERT INTO student_three VALUES (4,30,40,99.12,99.12);INSERT INTO student_three VALUES (5,30,40,99.19,99.19);-- 5. 查询表记录信息SELECT * FROM student_three;/*注意什么问题呢?如果我们定义数据类型为 FLOAT(M,D) DOUBLE(M,D)M 指的是什么意思呢?M 指的是数字字符,一共有多少个D 指的是什么意思呢?D 指的是小数部分,保留几位例如: FLOAT(4,1) 请问这个数据的最大是多少?999.9注意问题:如果我们定义的是 FLOAT(3,1) 传入的数据是 99.19 得到结果是 99.2小数部分,存在四舍五入*/

2、字符类型

1. 字符类型,也可以作为字符串使用CHAR2. 字符串类型(使用较多,类似于Java的 String)VARCHAR3. 文本类型TEXT 4. 多个选项当中,选择其中一个,例如:男或女SET

案例代码(常见的字符串类型演示)

-- 1. 删除表,如果表存在,则删除表DROP TABLE IF EXISTS student_four;-- 2. 创建表,包括有浮点数参与进来CREATE TABLE IF NOT EXISTS student_four(id INT,sname VARCHAR(11),gender SET('男','女'),address TEXT(20),phone CHAR(11));-- 3. 查询表结构DESC student_four;-- 4. 插入数据INSERT INTO student_four VALUES (1,'张三','男','湖北武汉','13812345678');INSERT INTO student_four VALUES (2,"李四","女","湖南长沙","13112345678");INSERT INTO student_four VALUES (3,"王五","女","湖南长沙","13312345678");INSERT INTO student_four VALUES (4,"王五","妖","湖南长沙","13312345678"); -- 报错的-- 5. 查询表记录SELECT * FROM student_four;/*1. varchar 和 char 都可以表示字符串。2. 字符串和字符,都需要使用引号引起来,单引号和双引号都可以。3. 当字符串的长度一旦指定之后,字符的数目不能超过4. SET("男","女") 之后,不能指定其他数据了,类似于我们的枚举类型*/

3、时间类型

1. 只是展示日期,不展示时间。(例如:08月08日)DATE2. 展示日期和时间(例如:08月08日08:08:08)DATETIME3. 时间戳。底层会保存为标准时间格式,在Java当中直接打印输出Date对象TIMESTAMP

案例代码

-- 1. 删除表,如果表存在,则删除表DROP TABLE IF EXISTS student_five;-- 2. 创建表,包括有浮点数参与进来CREATE TABLE IF NOT EXISTS student_five(id INT,birthday DATE,schooltime DATETIME,classtime TIMESTAMP);-- 3. 查询表结构DESC student_five;-- 4. 插入数据INSERT INTO student_five VALUES (1,NULL,NULL,NULL);INSERT INTO student_five VALUES (2,'-8-13','-8-13 11:17:53','-8-13 11:17:53');INSERT INTO student_five VALUES (3,'-8-13 11:17:53','-8-13 11:17:53','-8-13 11:17:53');-- 5. 查询表记录SELECT * FROM student_five;/*注意三者的区别:1. 如果添加数据全部是 null DATE 和 DATETIME 添加的值为 nullTIMESTAMP 添加的是当前的系统时间2. DATE添加的数据的时候,只会保存 年月日的部分,时分秒即使添加,也不会保存。3. 添加数据的时候,格式必须是 yyyy-MM-dd HH:mm:ss4. 添加数据的时候,三者必须使用引号引起来,单引号双引号都可以。*/

区别两个时间DATETIMETIMESTAMP

1. 相同点:都可以表示 日期和时间 yyyy-MM-dd HH:mm:ss2. 不同点:A. 如果添加数据为 null, DATETIME 添加的值为 null 但是 TIMESTAMP 添加的值是 当前的系统时间。B. 系统底层保存数据的区别。DATETIME底层会原封不动的保存,TIMESTAMP底层会转换成为UTC格式保存(包含时区)3. 版本问题:TIMESTAMP 在不同版本当中,区别很大。如果是 MySQL5.6.5 版本之前的,TIMESTAMP 在一张表当中,只能存在一列,他的数据类型为 TIMESTAMP如果是 MySQL5.6.5 版本之后的,TIMESTAMP 在一张表当中,可以存在多列,他们的数据类型为 TIMESTAMP

第二章 DML语句

第01节 新增表记录

1、简单写法

语法:

INSERT INTO 表名称 VALUES (列1的数值, 列2的数值, 列3的数值);

案例:

-- 1. 删除表DROP TABLE IF EXISTS student_six;-- 2. 创建表CREATE TABLE IF NOT EXISTS student_six(sid INT,sname VARCHAR(20),sage INT,sgender ENUM('男','女'));-- 3. 新增数据(简单写法)INSERT INTO student_six VALUES (1,'迪丽热巴',18,'女');INSERT INTO student_six VALUES (2,'古力娜扎',19); -- 错误的-- 4. 查询数据SELECT * FROM student_six;/*注意事项:1. 采用简单写法,必须要把所有列对应的值,全部写上才能通过*/

2、完整写法

语法:

INSERT INTO 表名称 (列名1,列名2,列名3) VALUES (列1的数值, 列2的数值, 列3的数值);

案例:

-- 1. 删除表DROP TABLE IF EXISTS student_six;-- 2. 创建表CREATE TABLE IF NOT EXISTS student_six(sid INT,sname VARCHAR(20),sage INT,sgender ENUM('男','女'));-- 3. 新增数据(完整写法)INSERT INTO student_six (sid,sname,sage,sgender) VALUES (1,'迪丽热巴',21,'女');INSERT INTO student_six (sid,sname,sage) VALUES (2,'古力娜扎',23);INSERT INTO student_six (sage,sid,sname) VALUES (24,3,'马尔扎哈');INSERT INTO student_six (sid,sname) VALUES (4,'张三'),(5,'李四'),(6,'王五');-- 4. 查询数据SELECT * FROM student_six;/*注意事项:1. 完整写法当中,需要写出列名称,要求就是 列名和列的值顺序要对应。2. 还可以进行批量的添加数据*/

第02节 修改表记录

1、标准语法

语法格式

UPDATE 表名称 SET 列名1=修改值1, 列名2=修改值2;UPDATE 表名称 SET 列名1=修改值1, 列名2=修改值2 WHERE 条件;

案例代码

-- 1. 删除表DROP TABLE IF EXISTS student_six;-- 2. 创建表CREATE TABLE IF NOT EXISTS student_six(sid INT,sname VARCHAR(20),sage INT,sgender ENUM('男','女'));-- 3. 插入表记录INSERT INTO student_six VALUES (1,'张三',23,'男'),(2,'李四',24,'女'),(3,'王五',25,'男');-- 4. 查询表数据SELECT * FROM student_six;-- 5. 修改操作:将sid=1的数据进行修改。 sname="张三丰",sage=100UPDATE student_six SET sname='张三丰',sage=100 WHERE sid=1;-- 6. 修改操作:将sage=50UPDATE student_six SET sage=50;

2、注意事项

加 WHERE不加 WHERE有什么区别呢?

1. 如果加上了 WHERE 条件,则符合条件的几行记录,才会被修改。2. 如果没有加上 WHERE 条件,则所有的记录,都认定为符合条件,会全部进行修改。

第03节 删除表记录

1、标准语法

语法格式

DELETE FROM 表名称;DELETE FROM 表名称 WHERE 条件;TRUNCATE 表名称;

案例代码:

-- 1. 删除表DROP TABLE IF EXISTS student_six;-- 2. 创建表CREATE TABLE IF NOT EXISTS student_six(sid INT,sname VARCHAR(20),sage INT,sgender ENUM('男','女'));-- 3. 插入表记录INSERT INTO student_six VALUES (1,'张三',23,'男'),(2,'李四',24,'女'),(3,'王五',25,'男');-- 4. 查询表数据SELECT * FROM student_six;-- 5. 删除某一条记录, 删除 sid=2DELETE FROM student_six WHERE sid=2;-- 6. 删除记录,如果不写 WHERE 条件会逐行删除表记录DELETE FROM student_six;-- 7. 如果想要删除整张表的记录,直接采用 TRUNCATE,先删除表,再创建一个一模一样的空表TRUNCATE student_six;

2、注意事项

1. 加WHERE条件 和 不加WHERE条件 有什么区别?A. 不加 WHERE 条件, 他是逐行删除表记录,直到所有的记录全部删除完毕。B. 加上 WHERE 条件, 他是根据条件进行删除,只删除满足条件的数据。2. TRUNCATE 和 WHERE 的区别?A. TRUNCATE 的删除方式是:直接删除整张表,然后创建一个一模一样的空表。B. WHERE 的删除方式是: 逐行删除表记录,效率非常低。

第三章 DQL语句

第01节 基础查询

1、准备表数据

-- 删除数据库DROP DATABASE IF EXISTS mydb04;-- 创建数据库,指定字符集 utf8CREATE DATABASE IF NOT EXISTS mydb04 CHARACTER SET 'utf8';-- 使用数据库USE mydb04;-- course表CREATE TABLE IF NOT EXISTS course (cs_id INT(11), -- 课程编cs_name VARCHAR(50), -- 课程名称cs_credit TINYINT(255), -- 课程学分cs_type CHAR(12), -- 课程类别cs_depart CHAR(6) -- 院系名);INSERT INTO course(cs_id,cs_name,cs_credit,cs_type,cs_depart) VALUES (513,'数据库原理及应用',4,'核心专业','信工'),(5203314,'计算机导论',4,'通识教育','信工'),(5219314,'数据结构',5,'专业核心','信工'),(5223013,'大学物理',4,'专业基础','信工'),(5227614,'毕业实习',4,'集中实践','信工'),(5230912,'云计算',2,'共同选修','信工'),(5236212,'机器学习',2,'共同选修','信工'),(5237514,'c语言',4,'专业基础','信工'),(5245112,'区块链',2,'任意选修','信工'),(722,'知识产权法',2,'任意选修','文法'),(2033,'概率论',3,'专业基础','基础'),(2336,'高等数学',6,'专业基础','基础'),(29299131,'劳动教育',1,'集中实践','学务');-- student表CREATE TABLE IF NOT EXISTS student (stu_id BIGINT(11), -- 学号stu_name CHAR(12), -- 姓名stu_sex ENUM('男','女'), -- 性别stu_age TINYINT(255), -- 年龄stu_major CHAR(9), -- 专业stu_college CHAR(12) -- 学院);INSERT INTO student(stu_id,stu_name,stu_sex,stu_age,stu_major,stu_college) VALUES (04550101,'郭奎','男',22,'计科','信工学院'),(04550102,'吕宇航','男',18,'计科','信工学院'),(04550103,'张豪辉','女',19,'计科','信工学院'),(04550107,'丁志杰','男',17,'金融学','金贸学院'),(04550109,'范伟','男',19,'金融学','金贸学院'),(04550116,'张依婷','女',17,'大数据','信工学院'),(04550120,'张维','男',19,'计科','信工学院'),(04550121,'朱柳阳','女',20,'计科','信工学院'),(04550144,'谭兵炎','男',20,'大数据','信工学院'),(04550153,'杨志强','男',17,'大数据','信工学院');-- 查询两张表的记录SELECT * FROM student;SELECT * FROM course;

学生表 student 的信息

课程表 course 的信息

2、简单查询

语法格式

-- 1. 查询表的全部记录SELECT * FROM 表名称;-- 2. 查询表当中的指定列SELECT 列名1,列名2,列名3 FROM 表名称;-- 3. 查询去掉重复的列(说明:只有查询完全相同的情况,才能去重)SELECT DISTINCT 列名1,列名2 FROM 表名称;-- 4. 进行四则运算的查询SELECT 列名1+列名2,列名1-数值 FROM 表名称;-- 5. 非空运算的查询(当列名2里面的数据,包含有NULL的情况下,按0计算)SELECT 列名1, IFNULL(列名2,0) FROM 表名称;-- 6. 取别名的查询(取别名的过程当中,AS可以省略不写)SELECT 列名1 别名1,列名2 AS 别名2 FROM 表名称;

案例代码

-- 1. 查询表的全部记录SELECT * FROM student;-- 2. 查询表当中的指定列SELECT stu_id,stu_name,stu_major FROM student;-- 3. 查询去掉重复的列, 查询的结果当中, 如果完全相同,才认定为去重SELECT DISTINCT stu_major FROM student;-- 4. 进行四则运算的查询-- 将查询的分数统一增加10分SELECT cs_name,cs_credit+10 FROM course;-- 5. 非空运算的查询UPDATE course SET cs_credit = NULL WHERE cs_name = 'C语言';SELECT cs_name,IFNULL(cs_credit+10,0) FROM course;-- 6. 取别名的查询SELECT cs_name,IFNULL(cs_credit+10,0) AS '成绩' FROM course;SELECT cs_name '学科',IFNULL(cs_credit+10,0) AS '成绩' FROM course;

3、条件查询

语法格式

SELECT 列名 FROM 表名称 WHERE 条件;

相关的条件

基础案例代码

-- 1. 查询分数在 3分以上的信息SELECT * FROM course WHERE cs_credit>3;-- 2. 查询分数为 1 的信息(这里只能写一个等号)SELECT * FROM course WHERE cs_credit=1;-- 3. 查询分数不为2的信息SELECT * FROM course WHERE cs_credit<>2;-- 4. 查询分数在2到5之间的数据SELECT * FROM course WHERE cs_credit BETWEEN 2 AND 5;-- 5. 查询分数为2和5的数据SELECT * FROM course WHERE cs_credit IN (2,5);-- 6. 查询分数为 NULL的数据SELECT * FROM course WHERE cs_credit IS NULL;-- 7. 查询分数不为 NULL的数据SELECT * FROM course WHERE cs_credit IS NOT NULL; -- 8. 查询分数低于2分,高于5的数据SELECT * FROM course WHERE cs_credit<2 OR cs_credit>5;

模糊查询

/*占位符: % 和 _% 表示的是0个或者多个_ 表示的是1个字符*/-- 1. 查询学科名称当中, 包含有"学"字的学科名称SELECT * FROM course WHERE cs_name LIKE "%学%"-- 2. 查询学科名称当中, 以"习"字结尾的SELECT * FROM course WHERE cs_name LIKE "%习";-- 3. 查询学科名称,由三个字符组成的SELECT * FROM course WHERE cs_name LIKE "___";-- 4. 查询学科名称,由"数"开头,包含4个字符的SELECT * FROM course WHERE cs_name LIKE "数___";

4、聚合函数

语法格式

1. 查个数COUNT(列名)2. 最大值MAX(列名)3. 最小值MIN(列名)4. 平均值AVG(列名)5. 总和 SUM(列名)

案例代码

-- 1. 查询一共有多少个学生SELECT COUNT(stu_id) FROM student;-- 2. 查询学生的最大年龄SELECT MAX(stu_age) FROM student;-- 3. 查询学生的最小年龄SELECT MIN(stu_age) FROM student;-- 4. 查询学生的平均年龄SELECT AVG(stu_age) FROM student;-- 5. 查询学生的年龄总和SELECT SUM(stu_age) FROM student;

5、排序查询

语法格式

-- 1. 升序: 从小到大,默认排序方式,可以省略 ASCORDER BY 列名 ASC;-- 2. 降序: 从大到小 ORDER BY 列名 DESC;

案例代码

-- 1. 查询学生表数据,按照年龄升序排列, 默认是升序,ASC可以省略不写SELECT * FROM student ORDER BY stu_age ASC;-- 2. 查询学生表数据,按照年龄降序排列SELECT * FROM student ORDER BY stu_age DESC;-- 3. 多条件排序,如果第一条件相同,则按照第二条件排序。-- 说明: 按照年龄降序排列,如果年龄相同,则按照学号升序排列SELECT * FROM student ORDER BY stu_age DESC, stu_id ASC;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。