mysql

## 4.1基础查询

//创建学生表stu
CREATE TABLE stu(
sid CHAR(6)COMMENT 'student_num’,
sname VARCHAR (50) COMMENT 'student_name',

age TINYINT UNSIGNED COMMENT 'student_age',

gender VARCHAR(50) COMMENT 'student_sex'
) ;


//学生表插入数据
INSERT INTO stu VALUES('s_1001', 	'liuYi', 	25 ,	 'male');
INSERT INTO stu VALUES('S_1002',	' chenEr',	19,	'female');

INSERT INTO stu VALUES('s_1003',	' zhangSan',	 20 ,	 'male');

INSERT INTO stu VALUES('s_1004',	'liSi',	18 , 	'female');

INSERT INTO stu VALUES('s_1005',	' wangWu',	 21 ,	 'male');


INSERT INTO stu VALUES('s_1006',	'zhaoLiu', 	22 ,	'female');

INSERT INTO stu VALUES('s_1007',	'sunQi',	23 , 	'male');

INSERT INTO stu VALUES('S_1008',	'zhouBa',	24 , 	'female');

INSERT INTO stu VALUES('S_1009',	'wuJiu',	25,	'male');

INSERT INTO stu VALUES('S_1010',	'zhegShi',	26,	'female');


INSERT INTO stu VALUES('S_1011',	'xxx', 	NULL ,	'NULL');


//创建员工表emp
CREATE TABLE emp(
empno INT COMMENT '员工编号',
ename VARCHAR (50) COMMENT '员工姓名',
job VARCHAR(50) COMMENT '员工工作',
mgr INT COMMENT '领导编号',
hiredate DATE COMMENT '入职日期',
sal DECIMAL(7,2) COMMENT '月薪',
comm DECIMAL(7,2) COMMENT '奖金',
deptno INT COMMENT '部门编号'
)
//员工表插入数据
INSERT INTO emp VALUES
(7369, 'SMITH', 'CLERK', 7902, '1980-12-17',  800, NULL, 20);

INSERT INTO emp VALUES
(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20',  1600, 300, 30);

INSERT INTO emp VALUES
(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22',  1250, 500, 30);

INSERT INTO emp VALUES
(7566, 'JONES', 'MANAGER', 7839, '1981-04-02',  2975, NULL, 20);

INSERT INTO emp VALUES
(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28',  1250, 1400, 30);

INSERT INTO emp VALUES
(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01',  2850, NULL, 30);

INSERT INTO emp VALUES
(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09',  2450, NULL, 10);

INSERT INTO emp VALUES
(7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19',  3000, NULL, 20);

INSERT INTO emp VALUES
(7839, 'KING', 'PRESINENT', NULL, '1981-11-17',  5000, NULL, 10);

INSERT INTO emp VALUES
(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-28',  1500, 0, 30);

INSERT INTO emp VALUES
(7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20);

INSERT INTO emp VALUES
(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);

INSERT INTO emp VALUES
(7902, 'FORD', 'ANALYST', 7566, '1981-12-03',  3000, NULL, 20);

INSERT INTO emp VALUES
(7934, 'MILLER', 'CLERK', 7782, '1982-010-23',  1300, NULL, 10);



//创建部门表dept
CREATE TABLE dept(
deptno INT COMMENT '部门编码',
dname VARCHAR(50) COMMENT '部门名称',
loc VARCHAR(50) COMMENT '部门所在地点'
);
//部门表插入数据
INSERT INTO Dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO Dept VALUES(20, 'RESEARCH',	'DALLAS');
INSERT INTO Dept VALUES(30,	'SALES',	'CHICAGO');
INSERT INTO Dept VALUES(40,	'OPERATIONS',	'BOSTON');
//查询stu数据
SELECT sid,sname,age,gender FROM stu;
//查询stu数据——倒序
SELECT gender,age,sname,sid FROM stu;
//用通配符*查询stu数据
SELECT * FROM stu;
//查询指定数据——sid,sname
SELECT sid,sname FROM stu;

4.2条件查询

带关系运算符的查询

//查询性别为女的所有学生信息
SELECT * FROM stu
WHERE gender='female';
//查询sid为S_1008的学生的姓名
SELECT sname FROM stu
WHERE sid='S_1008';
//查询年龄大于21学生的信息
SELECT * FROM stu
WHERE age>=21;

带AND关键字的查询

//查询年龄大于20岁的男学生的信息
SELECT * FROM stu
WHERE age>20 AND gender='male';
//查询sid不等于S_1007且年龄大于等于20岁的男同学的姓名
SELECT sname FROM stu
WHERE sid<>'S_1007' AND age >=20 AND gender ='male';

带OR关键字的查询

//查询学号为S_1002或者名字为sunQi的学生的信息
SELECT * FROM stu
WHERE sid='S_1002' OR sname='sunQi';
//查询学号为S_1005或者名字为zhaoLiu并且年龄小于24岁的学生的信息
SELECT * FROM stu
WHERE (sid='S_1005' OR sname ='zhouLiu') AND age<24;

带IN或NOT IN关键字的查询

//查询学号为S_1001,S_1002,和S_1003学生的信息
SELECT * FROM stu
WHERE sid IN('S_1001','S_1002','S_1003');
//查询年龄不到18,20,22和25学生的信息
SELECT * FROM stu
WHERE age NOT IN(18,20,22,25);

带 IS NULL或者IS NOT NULL关键字的查询

//查询年龄为NULL的学生的信息
SELECT * FROM stu
WHERE age IS NULL;
//查询性别不为NULL的学生的信息
SELECT * FROM stu
WHERE gender IS NOT NULL;

带BETWEEN AND关键字的查询

//查询年龄在23-25岁的学生的信息
SELECT * FROM stu
WHERE age BETWEEN 23 AND 25;
//查询年龄不在23-25岁的学生的信息
SELECT * FROM stu
WHERE age NOT BETWEEN 23 AND 25;

带LIKE关键字的查询

//查询姓名由五个字母构成的学生的信息
SELECT  * FROM stu
WHERE sname LIKE '_____';
//查询姓名由五个字母构成,并且第五个字母为i的学生的信息
SELECT * FROM stu
WHERE sname LIKE '____i';
//查询姓名以z开头的学生的信息
SELECT * FROM stu
WHERE sname LIKE 'z%';
//查询姓名中第二个字母为i的学生的信息
SELECT * FROM stu
WHERE sname LIKE '_i%';
//查询姓名中包含a的学生的信息
SELECT * FROM stu
WHERE sname LIKE '%a';

带DISTINCT关键字的查询

//查询所有员工月薪,并且去除重复
SELECT DISTINCT sal FROM emp;

4.3高级查询

排序查询

//查询所有学生记录,按年龄升序排序
SELECT * FROM stu
ORDER BY age ASC;
//查询所有学生记录,按年龄默认排序
SELECT * FROM stu
ORDER BY age;
//查询所有学生记录,按sid降序排序
SELECT * FROM stu
ORDER BY sid DESC;
//查询所有员工信息,按月薪降序排序,如果月薪相同,按员工编号升序排序
SELECT * FROM emp
ORDER BY sal DESC,empno ASC;

聚合函数

COUNT()函数
//查询员工表中的记录数
SELECT COUNT(*) FROM emp;
//用COUNT(1)方式查询
SELECT COUNT(1) FROM emp;
//COUNT后加AS别名直观查询
SELECT COUNT(1) AS totle FROM emp;
//省略AS
SELECT COUNT(1) totle FROM emp;
//查询员工表中有奖金的人数
SELECT COUNT(comm) AS total FROM emp;
//查询员工表
SELECT * FROM emp;
//查询月薪大于2500的人数,并将列名指定为total
SELECT COUNT(*) AS total FROM emp
WHERE sal>2500;
//查询员工表之中月薪与奖金和大于2500的人数
SELECT COUNT(*) AS total FROM emp
WHERE sal+comm>2500;
//用IFNULL函数将NULL替换为0
SELECT COUNT(*) AS total FROM emp
WHERE sal+IFNULL(comm,0)>2500;
SUM函数
//查询员工表中所有员工的月薪之和
SELECT SUM(sal) FROM emp;
//查询所有员工的月薪和及奖金和
SELECT SUM(sal),SUM(comm) FROM emp;
//查询所有员工的月薪与奖金的和,查询出的列名为totle
SELECT SUM(sal+IFNULL(comm,0))AS totle FROM emp;
AVG函数
//查询所有员工的的平均月薪
SELECT AVG(sal) FROM emp;
MAX函数
//查询员工的最高月薪
SELECT MAX(sal) FROM emp;
MIN函数
//查询员工最低月薪
SELECT MIN(sal) FROM emp;

分组查询

//查询所有学生,按性别字段分组
SELECT * FROM stu
GROUP BY gender;
//查询每个部门编号和部门工资之和
SELECT deptno,SUM(sal) FROM emp
GROUP BY deptno;
//查询每个部门的编号及人数
SELECT deptno,COUNT(*) FROM emp
GROUP BY deptno;
//查询每个部门编号及每个部门工资大于1500的人数
SELECT deptno,COUNT(*) FROM emp
WHERE sal>1500
GROUP BY deptno;

HAVING子句

//查询工资大于9000的部门编号及工资和
SELECT deptno,SUM(sal) FROM emp
GROUP BY deptno
HAVING SUM(sal)>9000;

LIMIT分页

//查询学生表前五条数据
SELECT  * FROM stu LIMIT 0,5;
//查询五条记录,从第三条开始
SELECT * FROM stu LIMIT 2,5;

数据的完整性

5.1实体完整性

主键约束

//创建订单表
CREATE TABLE orders(
oid INT,
total  DOUBLE,
name VARCHAR(20),
phone VARCHAR(20),
addr VARCHAR(50)
);
//插入一条数据
INSERT INTO orders(
oid,total,name,phone,addr
) VALUES(
1,100,'zs','1366','xxx'
);
//使用SELECT查看orders表中的数据
SELECT * FROM orders;
//再次向表中插入数据——oid仍然为1
INSERT INTO orders(
oid,total,name,phone,addr
) VALUES(
1,200,'ls','1369','yyy'
);
//添加主键约束,设置oid列为主键
ALTER TABLE orders ADD PRIMARY KEY(oid);
//两条oid相同,不可以添加主键,需要删除其中一条
DELETE FROM orders WHERE name='ls';
//设置主键
ALTER TABLE orders ADD PRIMARY KEY(oid);
//使用DESC语句查看表结构
DESC orders;
//将oid改为2,重新插入已删除的数据
//oid不重复时数据插入成功
INSERT INTO orders(
oid,total,name,phone,addr
) VALUES(
2,200,'ls','1369','yyy'
);
//主键不能为空(null)
INSERT INTO orders(
oid,total,name,phone,addr
) VALUES(
NULL,300,'w5','1591','zzz'
);

5.2索引

普通索引

//创建test表并添加约束和索引
CREATE TABLE test1(
id INT PRIMARY KEY,
name VARCHAR(20),
remark VARCHAR(50),
INDEX(name)
);
//使用SHOW CREATE TABLE语句查看表中具体信息
SHOW CREATE TABLE test1\G;
//创建test2表
CREATE TABLE test2(
id INT,
name VARCHAR(20),
remark VARCHAR(50)
);
//为test2表的ID字段创建普通索引
CREATE INDEX test2_id ON test2(id);
//使用SHOW CREATE TABLE语句查看表中具体信息
SHOW CREATE TABLE test2\G;

唯一索引

//创建test3并添加约束和索引
CREATE TABLE test3(
id INT PRIMARY KEY,
name VARCHAR(20),
remark VARCHAR(50),
UNIQUE INDEX(name)
);
//使用SHOW CREATE TABLE语句查看表中具体信息
SHOW CREATE TABLE test3\G;
//创建test4
CREATE TABLE test4(
id INT,
name VARCHAR(20),
remark VARCHAR(50)
);
//为test4表的ID字段创建唯一索引
CREATE UNIQUE INDEX test4_id ON test4(id);
//使用SHOW CREATE TABLE语句查看表中具体信息
SHOW CREATE TABLE test4\G;

5.3域完整性

非空约束

//创建test5
CREATE TABLE test5(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
addr VARCHAR(50)
);
//使用DESC语句查看表结构
DESC test5;
//向test5添加数据验证
INSERT INTO test5 (id,name,addr) VALUES(1,NULL,'xxx');
//添加字段的值为NULL,所以添加失败
//创建test6
CREATE TABLE test6(
id INT,
name VARCHAR(20),
addr VARCHAR(50)
);
//添加非空约束
ALTER TABLE test6 MODIFY id INT NOT NULL;

默认值约束

//创建test7并添加约束
CREATE TABLE test7(
id INT PRIMARY KEY,
name VARCHAR(20),
addr VARCHAR(50) DEFAULT 'ABC'
);
//添加数据验证
INSERT INTO test7(id,name) VALUES(1,'zs');
//查看表中数据
SELECT *FROM test7;
//创建测试表test8
CREATE TABLE test8(
id INT,
name VARCHAR(20),
addr VARCHAR(50)
);
//为name字段添加默认值约束
ALTER TABLE test8 MODIFY name VARCHAR(20) DEFAULT 'lilei';
//使用DESC查看表结构
DESC test8;

5.4引用完整性

外键的概念

//创建学科表subject,包含(编号sub_id)(名称sub_name)
CREATE TABLE subject(
sub_id INT PRIMARY KEY,
sub_name VARCHAR(20)
);
//创建学生表student包含(stu_id)(stu_name)(sub_id)
CREATE TABLE student(
stu_id INT PRIMARY KEY,
stu_name VARCHAR(20),
sub_id INT NOT NULL
);
//为subject添加数据
INSERT INTO subject(sub_id,sub_name) VALUES(1,'math');
//为student插入数据
INSERT INTO student(stu_id,stu_name,sub_id) VALUES(1,'zs',1);
//使用SELECT语句查看student表中的数据
SELECT * FROM student;
//删除主表subject数据
DELETE FROM subject;

添加外键约束

//为student表的sub_id添加外键约束
ALTER TABLE student
ADD FOREIGN KEY(sub_id) REFERENCES subject(sub_id);
//为subject插入数据
INSERT INTO subject(sub_id,sub_name) VALUES(1,'math');
//为student添加数据
INSERT INTO student(stu_id,stu_name,sub_id) VALUES(1,'zs',1);

6.2合并结果集

##创建test1表并添加约束
CREATE TABLE test1(
id INT PRIMARY KEY,
name VARCHAR(20)
);
##为test1添加数据
INSERT INTO test1(id,name)VALUES(1,'zs');

##创建test2表并添加约束
CREATE TABLE test2(
id INT PRIMARY KEY,
name VARCHAR(20)
);
##为test2添加数据
INSERT INTO test2(id,name)VALUES(1,'ls');

##分别向test1和test2添加一条相同的数据
INSERT INTO test1(id,name)VALUES(2,'abc');

INSERT INTO test2(id,name)VALUES(2,'abc');

##查询两张表的数据,重复数据被过滤
SELECT * FROM test1 UNION SELECT * FROM test2;

6.2.2使用UNION ALL关键字合并

##将test1和test2合并,不过滤重复数据
SELECT * FROM test1 UNION ALL SELECT * FROM test2;

6.3连续查询

6.3.1创建数据表和表结构的说明

##创建emp表
CREATE TABLE emp(
empno INT COMMENT '员工标号',
ename VARCHAR(50) COMMENT '员工姓名',
job VARCHAR(50) COMMENT '员工工作',
mgr INT COMMENT '领导编号',
hiredate DATE COMMENT '入职日期',
sal DECIMAL(7,2) COMMENT '月薪',
comm DECIMAL(7,2) COMMENT '奖金',
deptno INT COMMENT '部门编号'
);
##emp插入数据
INSERT INTO emp VALUES
(7369, 'SMITH', 'CLERK', 7902 , '1980-12-17',800  , NULL , 20 );
INSERT INTO emp VALUES
(7499, 'ALLEN', 'SALESMAN', 7698 , '1981-02-20', 1600 , 300 , 30 );
INSERT INTO emp VALUES
(7521, 'WARD', 'SALESMAN', 7698 , '1981-02-20', 1250 , 500 , 30 );
INSERT INTO emp VALUES
(7566, 'JONES', 'MANSGER',7839  , '1981-04-02', 2975 ,NULL  , 20 );
INSERT INTO emp VALUES
(7654, 'MARTIN', 'SALESMAN', 7698 , '1981-09-28', 1250 ,1400  , 30 );
INSERT INTO emp VALUES
(7698, 'BLAKE', 'MANAGER', 7839 , '1981-05-01',2850  ,NULL  ,30  );
INSERT INTO emp VALUES
(7782, 'CLARK', 'MANAGER', 7839 , '1981-06-09',2450  ,NULL  , 10 );
INSERT INTO emp VALUES
(7788, 'SCOTT', 'ANALYST', 7566 , '1987-04-19',3000  ,NULL  ,20  );
INSERT INTO emp VALUES
(7839, 'KING', 'PRESIDENT',NALL  , '1981-11-17',5000  ,NULL  , 10 );
INSERT INTO emp VALUES
(7844, 'TURNER', 'SALESMAN',7698  , '1981-09-08',1500  , 0 , 30 );
INSERT INTO emp VALUES
(7876, 'ADAMS', 'CLERK',7788  , '1987-05-23', 1100 ,NULL  , 20 );
INSERT INTO emp VALUES
(7900, 'JAMES', 'CLERK',7698  , '1981-12-03',950  ,NULL  ,30  );
INSERT INTO emp VALUES
(7902, 'FORD', 'ANALYST',7566  , '1981-13-03',3000  ,NULL  ,20  );
INSERT INTO emp VALUES
(7934, 'MILLER', 'CLERK',7782  , '1982-01-23',1300  ,NULL  , 10 );

##创建部门表
CREATE TABLE dept(
deptno INT COMMENT '部门编码',
dname VARCHAR(50) COMMENT '部门名称',
loc VARCHAR(50) COMMENT '部门所在地点'
);
##dept表插入数据
INSERT INTO dept VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES(20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES(30,'SALES','CHICAGO');
INSERT INTO dept VALUES(40,'OPERATIONS','BOSTON');

8视图

8.2视图的操作

8.2.1数据准备

##创建员工表
SET NAMES gbk;
CREATE TABLE emp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    sex CHAR(2) NOT NULL,
    age INT NOT NULL,
    department CHAR(10) NOT NULL,
    salary INT NOT NULL,
    home CHAR(30),
    marry CHAR(2) NOT NULL DEFAULT '否',
    hobby CHAR(30)
);
##向员工表插入数据
INSERT INTO emp
(id,name,sex,age,department,salary,home,marry,hobby)
VALUES
(NULL, '孙一' , '女' ,20 , '人事部' , '4000'  , '广东' , '否' , '网球'),
(NULL, '钱二' , '女' ,21 , '人事部' , '9000'  , '北京' , '否' , '网球'),
(NULL, '张三' , '男' ,22 , '研发部' , '8000'  , '上海' , '否' , '音乐'),
(NULL, '李四' , '女' ,23 , '研发部' , '9000'  , '重庆' , '否' , '无  '),
(NULL, '王五' , '女' ,24 , '研发部' , '9000'  , '四川' , '是' , '足球'),
(NULL, '赵六' , '男' ,25 , '销售部' , '6000'  , '福建' , '否' , '游戏'),
(NULL, '田七' , '女' ,26 , '销售部' , '5000'  , '山西' , '否' , '篮球');
##查看数据
SELECT * FROM emp;
##创建员工详细信息表
CREATE TABLE emp_detail(
    id INT PRIMARY KEY,
    pos CHAR(10) NOT NULL,
    experence CHAR(10) NOT NULL,
    CONSTRAINT 'fk_id' FOREIGN KEY(id) REFERENCES emp(id)
);

8.2.2创建视图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值