语句分类详解:
一、DDL----操作数据库和表结构
1.1 DDL操作数据库
1.1.1创建数据库
创建数据库 CREATE DATABASE 数据库名; 判断数据库是否已经存在,不存在则创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名; 创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER SET 字符集;
具体实现:
-- 直接创建数据库 db1
create database db1;
-- 判断是否存在,如果不存在则创建数据库 db2
create database if not exists db2;
-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;
1.1.2查看数据库
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;
注意:按 tab 键可以自动补全关键字
1.1.3修改数据库
修改数据库默认的字符集 ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集; 具体实现:
将 db3 数据库的字符集改成 utf8
alter database db3 character set utf8;
1.1.4删除数据库
删除数据库的语法 DROP DATABASE 数据库名;
具体实现:
删除 db2 数据库
drop database db2;
注意:每行 SQL 语句需要选中再执行,可以按 F9
使用数据库
查看正在使用的数据库 SELECT DATABASE(); 使用的一个 mysql 中的全局函数 使用/切换数据库 USE 数据库名; 具体实现:
-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库
use db4;
1.2 DDL操作表结构
先使用数据库才能进行操作表
1.2.1 创建表
创建表的格式
CREATE TABLE 表名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
具体操作:
- 创建 student 表包含 id,name,birthday 字段
-
create table student ( id int, -- 整数 name varchar(20), -- 字符串 birthday date -- 生日,最后没有逗号 );
1.2.2 查看表
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的 SQL 语句
SHOW CREATE TABLE 表名;
- 具体操作
--查看 day21 数据库中的所有表
use day21;
show tables;
--查看 student 表的结构
desc student;
--执行结果:
--查看 student 的创建表 SQL 语句
show create table student;
执行结果:
-- 存在的目的是为了避免关键字的冲突
CREATE TABLE `student` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
快速创建一个表结构相同的表
创建 s1 表,s1 表结构和 student 表结构相同
-- 创建一个 s1 的表与 student 结构相同
create table s1 like student;
desc s1;
1.2.3 修改表
添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;
修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;
删除列 DROP
ALTER TABLE 表名 DROP 列名;
修改表名
RENAME TABLE 表名 TO 新表名;
修改字符集 character set
ALTER TABLE 表名 character set 字符集;
1.2.4 删除表
直接删除表
DROP TABLE 表名;
判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;
具体实现:
-- 直接删除表 s1 表
drop table s1;
-- 判断表是否存在并删除 s1 表
drop table if exists `create`;
与直接删除的区别
如果表不存在,不删除,存在则删除
二、DML----操作表中数据
2.1 DML操作表中的数据
2.1.1 插入记录
INSERT [INTO] 表名 [字段名] VALUES (字段值)
INSERT INTO 表名:表示往哪张表中添加数据
(字段名 1, 字段名 2, …):要给哪些字段设置值
VALUES (值 1, 值 2, …):设置具体的值
插入全部字段两种方式:
- 所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
- 不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
插入部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
2.1.2 更新表记录
- UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
- UPDATE: 需要更新的表名
- SET: 修改的列值
- WHERE: 符合条件的记录才更新
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
具体实现
-- 不带条件修改数据,将所有的性别改成女
update student set sex = '女';
-- 带条件修改数据,将 id 号为 2 的学生性别改成男
update student set sex='男' where id=2;
-- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京
update student set age=26, address='北京' where id=3;
2.1.3 删除表记录
- DELETE FROM 表名 [WHERE 条件表达式]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
不带条件删除数据
DELETE FROM 表名;带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名;truncate 和 delete 的区别:
truncate 相当于删除表的结构,再创建一张表。
具体实现
-- 带条件删除数据,删除 id 为 1 的记录
delete from student where id=1;
-- 不带条件删除数据,删除表中的所有数据
delete from student;
三、DQL----查询表中的数据
3.1 简单查询
查询表所有行和列的数据
使用*表示所有列
SELECT * FROM 表名;查询所有的学生:select * from student;查询指定列查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;查询 student 表中的 name 和 age 列select name,age from student;
3.2 指定列的别名进行查询
使用关键字
使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。语法:
对列指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;具体操作:
-- 使用别名
select name as 姓名,age as 年龄 from student;
-- 表使用别名
select st.name as 姓名,age as 年龄 from student as st
3.3 清除重复值
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;具体操作:
查询学生来至于哪些地方
-- 查询学生来至于哪些地方
select address from student;
-- 去掉重复的记录
select distinct address from student;
3.4 查询结果参与运算
某列数据和固定值运算
SELECT 列名 1 + 固定值 FROM 表名;
某列数据和其他列数据参与运算
SELECT 列名 1 + 列名 2 FROM 表名;
注意: 参与运算的必须是数值类型
3.5 条件查询
为什么要条件查询?
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。条件查询的语法
SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
具体实现:
准备数据
创建一个学生表,包含如下列:
具体操作:
-- 查询 math 分数大于 80 分的学生
select * from student3 where math>80;
-- 查询 english 分数小于或等于 80 分的学生
select * from student3 where english <=80;
-- 查询 age 等于 20 岁的学生
select * from student3 where age = 20;
-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
select * from student3 where age <> 20;
select * from student3 where age != 20;
具体操作:
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
select * from student3 where age>35 and sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
select * from student3 where age>35 or sex='男';
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id=1 or id=3 or id=5;
-- 查询姓马的学生
select * from student3 where name like '马%';
select * from student3 where name like '马';
-- 查询姓名中包含'德'字的学生
select * from student3 where name like '%德%';
-- 查询姓马,且姓名有两个字的学生
select * from student3 where name like '马_';