SQL的分类
分类 | 说明 |
---|---|
数据定义语言 | 简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列 等。 |
数据操作语言 | 简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。 |
数据查询语言 | 简称DQL(Data Query Language),用来查询数据库中表的记录。 |
数据控制语言 | 简称DCL(Date Control Language),用来定义数据库的访问权限和安全级别, 及创建用户。 |
1 DDL操作 数据库
1.1 创建数据库
命令 | 说明 |
---|---|
create database 数据库名; | 创建指定名称的数据库。 |
create database 数据库名 character set 字符集; | 创建指定名称的数据库,并且指定字符集(一般都 指定utf-8) |
/*
方式1 直接指定数据库名进行创建 默认数据库字符集为:latin1
*/
CREATE DATABASE db1;
/*
方式2 指定数据库名称,指定数据库的字符集 一般都指定为 utf8,与Java中的编码保持一致
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;
1.2 查看/选择数据库
命令 | 说明 |
---|---|
use 数据库 | 切换数据库 |
select database(); | 查看当前正在使用的数据库 |
show databases; | 查看Mysql中 都有哪些数据库 |
show create database 数据库名; | 查看一个数据库的定义信息 |
-- 切换数据库 从db1 切换到
db1_1 USE db1_1;
-- 查看当前正在使用的数据库
SELECT DATABASE();
-- 查看Mysql中有哪些数据库
SHOW DATABASES;
-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;
1.3修改数据库
命令 | 说明 |
---|---|
alter database 数据库名 character set 字符集; | 数据库的字符集修改操作 |
-- 将数据库db1 的字符集 修改为
utf8 ALTER DATABASE db1 CHARACTER SET utf8;
-- 查看当前数据库的基本信息
SHOW CREATE DATABASE db1;
1.4删除数据库
命令 | 说明 |
---|---|
drop database 数据库名 | 从MySql中永久的删除某个数据库 |
-- 删除某个数据库
DROP DATABASE db1_1;
2 DDL 操作 数据表
2.1创建表
-- 语法格式:
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型
注意 最后一列不要加逗号
);
sql实现
-- 切换到数据库
db1 USE db1;
-- 创建表
CREATE TABLE category(
cid INT,
cname VARCHAR(20)
);
快速创建一个表结构相同的表(复制表结构)
-- 语法
create table 新表明 like 旧表名
sql实现
-- 创建一个与db1一样结构的db2
CREATE TABLE db2 LIKE db1;
-- 查看表结构
DESC test2;
2.2 查看表
命令 | 说明 |
---|---|
show tables; | 查看当前数据库中的所有表名 |
desc 表名; | 查看数据表的结构 |
-- 查看当前数据库中的所有表名
SHOW TABLES;
-- 显示当前数据表的结构
DESC category;
-- 查看创建表的SQL语句
SHOW CREATE TABLE category;
2.3 删除表
命令 | 说明 |
---|---|
drop table 表名; | 删除表(从数据库中永久删除某一张表) |
drop table if exists 表名; | 判断表是否存在, 存在的话就删除,不存在就不执行删除 |
-- 直接删除 test1 表
DROP TABLE test1;
-- 先判断 再删除test2表
DROP TABLE IF EXISTS test2;
2.4修改表
-
修改表名
-
-- 语法 rename table 旧表名 to 新表名 -- 将category表 改为 category1 RENAME TABLE category TO category1;
-
-
修改表的字符集(character set)
-
alter table 表名 character set 字符集 将category表的字符集 修改为utf8 alter table category character set utf8
-
-
向表中添加列(add)
-- 语法格式 alert table 表名 add 字段名称 字段类型 -- 为分类表添加一个新的字段为 分类描述 cdesc varchar(20) ALTER TABLE category ADD cdesc VARCHAR(20);
-
修改表中列的 数据类型或长度(modify)
-
-- 语法格式 alter table 表名 modify 字段名称 字段类型 -- 对分类表的描述字段进行修改,类型varchar(50) ALTER TABLE category MODIFY cdesc VARCHAR(50);
-
-
修改列名称(change)
-
-- 语法格式 alter table 表名 change 旧列名 新列名 类型(长度); -- 对分类表中的 desc字段进行更换, 更换为 description varchar(30) ALTER TABLE category CHANGE cdesc description VARCHAR(30);
-
-
删除列 (drop)
-
-- 语法格式 alter table 表名 drop 列名; -- 删除分类表中description这列 ALTER TABLE category DROP description;
-
3 DDL 操作 数据表
3.1 插入数据
-- 语法格式
insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
需要用的数据
表名:student
表中字段:
学员ID, sid int
姓名, sname varchar(20) 年龄, age int
性别, sex char(1)
地址, address varchar(40)
# 创建学生表
CREATE TABLE student(
sid INT,
sname VARCHAR(20),
age INT,
sex CHAR(1),
address VARCHAR(40)
);
-
插入方式一
-
-- 插入全部字段, 将所有字段名都写出来 INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟空',20,'男','花果 山');
-
-
插入方式二
-
-- 插入全部字段,不写字段名 INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
-
-
插入方式三
-
-- 插入指定字段的值 INSERT INTO category (cname) VALUES('白骨精');
-
3.2 更改数据
-- 不带条件的修改
update 表名 set 列名 = 值
-- 带条件的修改
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值]
-- 不带条件修改,将所有的性别改为女
UPDATE student SET sex = '女';
-- 带条件的修改,将sid 为3的学生,性别改为男
UPDATE student SET sex = '男' WHERE sid = 3;
-- 一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京
UPDATE student SET age = 20,address = '北京' WHERE sid = 2;
3.3删除数据
-- 删除所有数据
delete from 表名
-- 指定条件 删除数据
delete from 表名 [where 字段名 = 值]
-- 删除 sid 为 2 的数据
delete from student where sid = 2
-- 删除所有数据
DELETE FROM student;
如果要删除表中的所有数据,有两种做法
- delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
- truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高
3 DQL 查询表中数据
3.1 需要的数据
#创建员工表
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,
date dept_name
部门名称,varchar
#创建员工表 CREATE TABLE emp(
eid INT,
ename VARCHAR(20), sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
#添加数据
INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部');
INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);
INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',财务部);
3.2 简单查询
-- select 列名 from 表名
-- 查询emp中的 所有数据
select * from emp; -- 使用 * 表示所有列
-- 查询emp表中的所有记录,仅显示id和name字段
SELECT eid,ename FROM emp;
-- 将所有的员工信息查询出来,并将列名改为中文
# 使用 AS关键字,为列起别名
SELECT
eid AS '编号', ename AS '姓名' , sex AS '性别', salary AS '薪资',
hire_date '入职时间', -- AS 可以省略
dept_name '部门名称'
FROM emp;
-- 查询一共有几个部门
SELECT DISTINCT dept_name FROM emp; -- 使用distinct 关键字,去掉重复部门信息
-- 将所有员工的工资 +1000 元进行显示
select ename, salary + 1000 from emp;
3.3 条件查询
-- 语法格式
select 列名 from 表名 where 条件表达式 -- 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉
-- 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';
-- 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
-- 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
-- 查询薪水价格是3600或7200或者20000的所有员工信息
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
SELECT * FROM emp WHERE salary IN(3600,7200,20000);
通配符查询
通配符 | 说明 |
---|---|
% | 表示匹配任意多个字符串, |
_ | 表示匹配 一个字符 |
# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;