这里使用的是企业版,因cmd使用命令不方便管理,所以使用SQLyog更为方便
执行SQL语句命令:
先选中所要执行的命令,点击左上角 “Execute Current Query”
1.1 使用指定数据库
USE blog;
1.2 创建表
-- 创建表
CREATE TABLE teacher(
id INT,
NAME VARCHAR(20)
);
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
gender VARCHAR(2),
age INT
);
1.3 删除表
-- 删除表
DROP TABLES teacher;
DROP TABLES student;
1.4 查看所有表
-- 查看所有表
SHOW TABLES;
1.5 查看表中字段
-- 查看表中字段
DESC teacher;
DESC student;
1.6 增删查改
-- **************** 增删改查 **************** --
-- 1.1 增加数据(全部字段、部分字段)
INSERT INTO student VALUES(1,'张三','男',20);
INSERT INTO student VALUES(2,'李四','男',18);
INSERT INTO student(id,NAME) VALUES(3,'王五');
INSERT INTO student(id,NAME) VALUES(4,'麻子');
-- 1.2 修改数据(所有数据、部分数据)
UPDATE student SET gender='女';
UPDATE student SET age=18;
UPDATE student SET gender='男' WHERE id=1; -- 修改id为1的学生性别为男
UPDATE student SET age=20 WHERE id=2;
UPDATE student SET gender='男',age=30 WHERE id=3;
-- 1.3 删除数据
SELECT *FROM student; -- 可带条件删除,不能删除后约束,可删数据
TRUNCATE TABLE student; -- 不能带条件删除,可删约束,也可删数据
DELETE FROM student WHERE id=4;
-- 查询数据
SELECT * FROM student;
2.1 查询所有列
SELECT *FROM student;
2.2 查询指定列
SELECT id,NAME FROM student;
2.3 查询时指定别名(多表查询用别名方便)
SELECT id AS '编号',NAME AS '姓名' FROM student AS stu;
2.4 查询时添加常量列(查询student表时添加一个班级列)
SELECT id,NAME,gender,age,'java帮'AS '班级' FROM student;
2.5 查询时合并列(数值:servelt+jsp总成绩)
ALTER TABLE student ADD servelt INT,ADD jsp INT;
ALTER TABLE student ADD address VARCHAR(20);
DESC student;
UPDATE student SET servelt=10,jsp=85,address='啦啦啦' WHERE id=1;
UPDATE student SET servelt=20,jsp=95,address='' WHERE id=2;
SELECT id,NAME,(servelt+jsp) AS '总成绩' FROM student;
2.6 查询时取出重复信息
SELECT DISTINCT gender FROM student;
SELECT DISTINCT (age) FROM student;
2.7 条件查询
-- 2.7 条件查询
-- 逻辑:and、or
-- 比较:> < >= <= = <> between and
-- 判空:null、空字符串:is [not] null、 ==''、 <>''
-- 模糊:like
-- 查询 id=2 和 姓名=李四 的学生信息(逻辑)
SELECT * FROM student WHERE id=2 AND NAME='李四';
-- 查询 id=2 或 姓名=李四 的学生信息(逻辑)
SELECT * FROM student WHERE id=4 OR NAME='李四';
-- 查询 servelt>70 的学生信息
SELECT * FROM student WHERE servelt>10;
-- 查询 55 AND servelt<20;
-- 查询 女生 信息
SELECT * FROM student WHERE gender<>'男';
-- 查询 地址为空(NULL、空字符串) 的学生信息
SELECT * FROM student WHERE address IS NULL OR address='';
SELECT * FROM student WHERE address IS NULL;
SELECT * FROM student WHERE address='';
-- 查询 地址不为空(NULL、空字符串) 的学生信息
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';
-- 查询 姓'张' 的学生信息
-- %:任意个字符
-- _:一个字符
SELECT * FROM student WHERE NAME LIKE '张%';
-- 查询 姓'麻'且名字只有两个字 的学生信息
SELECT * FROM student WHERE NAME LIKE '麻_';
2.8 聚合查询
-- 2.8 聚合查询
-- 常用聚合函数:sum、avg、max、min、count
-- 查询学生 servelt 的总成绩
SELECT SUM(servelt) AS 'servelt总成绩' FROM student;
-- 查询学生 servelt 的平均分
SELECT AVG(servelt) AS 'servelt平均分' FROM student;
-- 查询学生 servelt 的最高分
SELECT MAX(servelt) AS 'servelt最高分' FROM student;
-- 查询学生 servelt 的最低分
SELECT MIN(servelt) AS 'servelt最低分' FROM student;
-- 查询学生数量
SELECT COUNT(*) AS '学生数量' FROM student; -- 不包括含NULL的数据
SELECT COUNT(id) AS '学生数量' FROM student;
2.9 分页查询
-- 2.9 分页查询
-- 查询1、2条记录(limit 起始行,查询几行)
SELECT * FROM student LIMIT 0,2;
-- 查询3、4条记录(limit 起始行,查询几行)
SELECT * FROM student LIMIT 2,2;
2.10 排序查询
-- 2.10 排序查询
-- order by 字段 asc/desc
-- asc :正序 数值:递增 字母:自然顺序
-- desc:逆序 数值:递减 字母:自然逆序
-- 字段数据相同,则按记录顺序
-- 按照 id 顺序排序
SELECT * FROM student ORDER BY id; -- 默认正序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id DESC;
-- 按照 servlet 正序,jsp逆序
SELECT * FROM student ORDER BY servelt ASC,jsp DESC;
2.11 分组查询
-- 2.11 分组查询后统计
-- 查询男女人数(先分组,再统计)
SELECT gender,COUNT(*) FROM student GROUP BY gender;
-- 2.12 分组查询后筛选
-- 查询总人数大于2的性别
-- 分组之前条件用where,分组之后条件用having
SELECT gender,COUNT(*) FROM student GROUP BY gender HAVING COUNT(*)>2;
3. 约束
3.1 非空:NOT NULL
-- 3.1 非空:NOT NULL (限制字段必须赋值,非空不能赋null)
CREATE TABLE student2(
id INT,
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL,
age INT
);
INSERT INTO student2(id,NAME) VALUES(1,'婉儿');
INSERT INTO student2(id,NAME,gender) VALUES(2,'后裔',NULL);
INSERT INTO student2(id,NAME,gender) VALUES(3,'李白','男');
SELECT *FROM student2;
DROP TABLE student2;
3.2 唯一:UNICODE
-- 3.2 唯一:UNICODE
CREATE TABLE student3(
id INT UNICODE,
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL,
age INT
);
INSERT INTO student3(id,NAME,gender) VALUES(1,'李白','哈哈哈');
INSERT INTO student3(id,NAME,gender) VALUES(1,'李信','哈哈哈');
SELECT *FROM student3;
DROP TABLE student3;
3.3 主键:PRIMARY KEY (非空、唯一)
-- 3.3 主键:PRIMARY KEY (非空、唯一)
CREATE TABLE student4(
id INT PRIMARY KEY, -- 主键
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL, -- 非空
age INT
);
INSERT INTO student4(id,NAME,gender) VALUES(2,'孙尚香','哈哈哈');
INSERT INTO student4(id,NAME,gender) VALUES(2,'香香姐','哈哈哈');
SELECT *FROM student4;
DROP TABLE student4;
3.4 自增长:AUTO_INCREMENT(自动递增)
-- 3.4 自增长:AUTO_INCREMENT(自动递增)
CREATE TABLE student5(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL,
age INT
);
INSERT INTO student5(NAME) VALUES('李白');
INSERT INTO student5(NAME) VALUES('李二白');
INSERT INTO student5(NAME) VALUES('李小白');
CREATE TABLE student6(
id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- ZEROFILL:0填充
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL,
age INT
);
INSERT INTO student6(NAME) VALUES('李白');
INSERT INTO student6(NAME) VALUES('李二白');
INSERT INTO student6(NAME) VALUES('李小白');
-- 不能影响自增长约束
DELETE FROM student6;
-- 能影响自增长约束
TRUNCATE TABLE student6;
SELECT *FROM student5;
SELECT *FROM student6;
DROP TABLE student5;
DROP TABLE student6;
3.5 外键:解决数据冗余高的问题——独立出一张表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptName VARCHAR(20) -- 部门名称
);
INSERT INTO employee VALUES(1,'李大白','软件开发部');
INSERT INTO employee VALUES(2,'李二白','软件开发部');
INSERT INTO employee VALUES(3,'李小白','应用开发部');
SELECT * FROM employee;
-- 添加员工 部门名称数据冗余高
INSERT INTO employee VALUES(4,'孙尚香','软件开发部');
-- 解决数据冗余高:为冗余字段写入一张独立的表--部门表
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR(20) -- 部门名称
);
INSERT INTO dept(id,deptName) VALUES(1,'软件开发部');
INSERT INTO dept(id,deptName) VALUES(2,'应用开发部');
INSERT INTO dept(id,deptName) VALUES(3,'应用维护部');
-- 修改员工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(20),
deptName INT -- 部门名称
);
INSERT INTO employee VALUES(1,'李大白',1);
INSERT INTO employee VALUES(2,'李二白',2);
INSERT INTO employee VALUES(3,'李小白',1);
SELECT * FROM employee;
SELECT * FROM dept;
DROP TABLE employee;
DROP TABLE dept;
3.6 级联:ON UPDATE/DELETE CASCADE
要修改副表的关联数据才能修改主表数据,希望可以直接修改主表,从而影响副表数据
-- 要修改副表的关联数据才能修改主表数据
-- 希望可以直接修改主表,从而影响副表数据
-- 级联:ON UPDATE/DELETE CASCADE (以外键为基础)
CREATE TABLE employee( -- 副表
id INT PRIMARY KEY,
empName VARCHAR(20),
deptId INT, -- 部门名称-->部门ID
-- 声明一个外键
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
-- 外键名称 外键 参考表(参考字段) 级联修改 级联删除
);
UPDATE dept SET id=4 WHERE id=3; -- 级联删除,在表dept中把id由3改成4,级联到表employee
DELETE FROM dept WHERE id=1 ; -- 级联删除,在表dept中把id为1的部门删除,级联到表employee