SQL 语句分类
Data Definition Language (DDL 数据定义语言) 如:建库,建表
Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
Data Query Language(DQL 数据查询语言),如:对表中的查询操作
Data Control Language(DCL 数据控制语言),如:对用户权限的设置
我对上面的方法进行了一次整理
----->数据库
-- 直接创建数据库 db1 create database db1; -- 判断是否存在,如果不存在则创建数据库 db2 create database if not exists db2; -- 创建数据库并指定字符集为 gbk create database db3 default character set gbk;----->表格 创建表的格式 CREATE TABLE 表 名 ( 字段名 1 字段类型 1, 字段名 2 字段类型 2 );
create table student ( id int, -- 整 数 name varchar(20), -- 字符串 birthday date -- 生日,最后没有逗号 );创建 s1 表,s1 表结构和 student 表结构相同
-- 创建一个 s1 的表与 student 结构相同 create table s1 like student; desc s1;----->添加表中的数据DML 插入记录 INSERT [INTO] 表名 [字段名] VALUES (字段值) INSERT INTO 表名:表示往哪张表中添加数据 (字段名 1, 字段名 2, …):要给哪些字段设置值 VALUES (值 1, 值 2, …):设置具体的值
--所有的字段名都写出来 INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3); insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男'); --不写字段名 INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…); insert into student values (3, '孙悟饭', 18, '男', '龟仙人洞中'); --插入部分数据 INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...); insert into student values (3, '孙悟饭', 18, '男');注: 没有添加数据的字段会默认为 NULL , 但是 timestamp 类型 是特殊的(不添加内容默认计算机当前时间)
表格复制
将表名 2 中的所有的列复制到表名 1 中
INSERT INTO 表 名 1 SELECT * FROM 表 名 2; --将 student 表中的数据添加到 student2 中 insert into student2 select * from student; --如果只想复制 student 表中 name,age 字段数据到 student2 中, 两张表都写出相应的列名 insert into student2 (name,age) select name,age from student;----->数据库
-- 查看所有的数据库 show databases; -- 查看正在使用的数据库 select database(); -- 改变要使用的数据库 use db4;----->表格
--查看某个数据库中的所有表 SHOW TABLES; --查看表结构 DESC 表名; --查看 day21 数据库中的所有表 use day21; show tables; --查看某个表 SHOW CREATE TABLE 表名; show create table student; --查看 student 表的结构 desc student;----->查看表中的数据DQL 1)查询表所有行和列的数据
SELECT * FROM 表名; --查询学生表中所有内容: select * from student;2)查询指定列
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名; --查询 student 表中的 name 和 age 列 select name,age from student;3)指定列的别名进行查询
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 st4)查询结果参与运算
--某列数据和固定值运算 SELECT 列名 1 + 固定值 FROM 表名; --某列数据和其他列数据参与运算 SELECT 列名 1 + 列名 2 FROM 表名; -- 给所有的数学加 5 分 select math+5 from student; -- 查询 math + english 的和 select *,(math+english) as 总成绩 from student; -- as 可以省略注: 查询时的加减操作不会影响表格中的数据
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=5; --查询 english 成绩大于等于 75,且小于等于 90 的学生 select * from student3 where english between 75 and 90;in 关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...); -- 查询 id 是 1 或 3 或 5 的学生 select * from student3 where id in(1,3,5); -- 查询 id 不是 1 或 3 或 5 的学生 select * from student3 where id not in(1,3,5);like 关键字
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'; 例: -- 查询姓马的学生 select * from student3 where name like '马%'; -- 查询姓马,且姓名中有两个字的学生 select * from student3 where name like '马_';----->数据库 将 db3 数据库的字符集改成 utf8
alter database db3 character set utf8;----->表格
1)修改表名
RENAME TABLE 表名 TO 新表名; --将学生表 student 改名成 student2 rename table student to student2;2)修改字符集 character set
ALTER TABLE 表名 character set 字符集; --将 student2 表的编码修改成 gbk alter table student2 character set gbk;3)添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型; --为学生表添加一个新的字段 remark,类型为 varchar(20) alter table student add remark varchar(20);4)修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型; --将 student 表中的 remark 字段的改成 varchar(100) 类型 alter table student modify remark varchar(100);5)修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型; --将 student 表中的 remark 字段名改成 intro,类型 varchar(30) alter table student change remark intro varchar(30);----->修改表中的数据DML
1)不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行 -- 不带条件修改数据,将所有的性别改成女 update student set sex = '女';2)带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值; -- 带条件修改数据,将 id 号为 2 的学生性别改成男 update student set sex='男' where id=2; -- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京 update student set age=26, address='北京' where id=3;----->数据库 删除 db2 数据库
drop database db2;----->表格
直接删除表 s1 表
-- 直接删除表 s1 表 drop table s1; -- 判断表是否存在并删除 s1 表 drop table if exists s1;删除列 DROP
ALTER TABLE 表名 DROP 列名; --删除 student 表中的字段 intro alter table student drop intro;----->删除表中的数据DML
1)不带条件删除数据
DELETE FROM 表名; DELETE FROM 表名 [WHERE 条件表达式] delete from student;如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。 你可以在 WHERE 子句中指定任何条件
2)带条件删除数据
DELETE FROM 表名 WHERE 字段名=值; -- 带条件删除数据,删除 id 为 1 的记录 delete from student where id=1;3)使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名; -- 不带条件删除数据,删除表中的所有数据 truncate table student;truncate 和 delete 的区别: truncate 相当于删除表的结构,再创建一张表。