DQL 数据库查询
关键词 select
注意:从数据库查询信息 不会改变数据库表中的数据
查询会产生一张新的表 从原来那个表中查出来的
1.关系运算符 = ! > < >= <>(不等于)
between..and.. 在什么范围内(包括这个范围)
3.is not null 判断不是空的
is null 判断是空的
4.逻辑运算符
and 与
or 或
not 非
5.in() 在什么范围中查询
not in()
字段控制语句去除重复数据
SELECT DISTINCT sal FROM emp;
查看每个人佣金和薪金的和
相当于查询了一个新的字段
注意:如果一个值和null相加name得到的值 一定null值
SELECT empno,sal+comm FROM emp;
可以在查询的时候 给空值 赋个值
SELECT *,empno,sal+IFNULL(comm,0) From emp;
查询时可以给字段起个别名
SELECT *,empno,sal+IFNULL(comm,0) total From emp;
empno job字段 起别名
SELECT empno as n,job as j FROM emp;
按学生年龄排序
默认是升序(ASC)
降序(DESC)
注意:sql语句关键词 不要与表名重复
SELECT * FROM stu ORDER BY age DESC;
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序
SELECT * FROM emp ORDER BY sal DESC,empno DESC;
模糊查询
查询名字中带l的人的所有信息
%l 表示以l结尾 反之 %表示很多字母
_下划线 表示单个字母
SELECT * FROM emp WHERE ename LIKE '%l';
聚合函数 都可以自动过滤空值
COUNT 查询的是 获取总记录数
SELECT COUNT(*) FROM emp;
查询公司sal的总和(查询时记录数要相同)
SELECT COUNT(*),sum(sal) FROM emp;
查询emp表中有佣金的人数
自动过滤空值
SELECT COUNT(comm) from emp;
查询emp表中月薪大于2500的人数
SELECT COUNT(sal) from emp WHERE sal>2500;
统计月薪与佣金之和大于2500元的人数
SELECT COUNT(*) From emp WHERE sal+IFNULL(comm,0) >2500;
查询有佣金的人数,有领导的人数
SELECT COUNT(comm) 佣金,COUNT(mgr) 领导 from emp;
查询所有雇员月薪和,以及所有雇员佣金和
SELECT sum(sal),sum(comm) from emp;
查询所有雇员月薪+佣金和
SELECT SUM(sal+IFNULL(comm,0)) from emp;
统计所有员工平均工资
SELECT AVG(sal+IFNULL(comm,0)) from emp;
查询最高工资和最低工资
SELECT MAX(sal),MIN(sal) from emp;
分组查询 group by
查询每个部门的部门编号和每个部门的工资和
如果是分组查询 那么GROUP BY后面的字段
才可以 查询字段的位置
SELECT deptno,SUM(sal) from emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数
SELECT deptno,COUNT(*) from emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数
先用where筛选 然后在进行分组
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
查询工资总和大于9000的部门编号以及工资和
where后面不能跟聚合函数
HAVING是分组以后使用的筛选关键词
SELECT deptno,sum(sal) from emp GROUP BY deptno HAVING SUM(sal)>9000;
分页查询 LIMIT 关键词
查询前3条数据
参数1 从哪条数据开始
参数2 一共查询几条
int 当前页 = 1;
int 每页显示总数 = 5;
SELECT * from emp LIMIT 3,3;
(当前页-1)*每页显示总数,每页显示总数;
数据的完整性实体完整性
主键约束
创建表stu1 sid sname 把id设置为主键
主键特点:唯一且不能为null
CREATE TABLE stu1(
sid int PRIMARY KEY,
sname varchar(20)
);
方式2
CREATE TABLE stu2(
sid int,
sname varchar(20),
PRIMARY KEY (sid)
);
用来创建联合主键
当连个字段的值完全一样才算重复
CREATE TABLE stu3(
classid int,
sid int,
sname varchar(20),
PRIMARY KEY (sid,classid)
);
创建方式3
CREATE TABLE stu4(
sid int,
sname varchar(20)
);
添加主键约束
ALTER TABLE stu4 ADD CONSTRAINT PRIMARY KEY(sid);
删除主键约束
ALTER TABLE stu4 DROP PRIMARY KEY;
唯一约束 UNIQUE
特点:值唯一(可以为空)
CREATE TABLE stu5(
sid int PRIMARY KEY,
sname varchar(20) UNIQUE
);
自动增长列
特点:自动加2 并且出现过的 就不会再出现了
CREATE TABLE stu6(
sid int PRIMARY KEY auto_increment,
sname varchar(20) UNIQUE
);
INSERT INTO stu6 (sname)values('haha');
INSERT INTO stu6 (sname,sid)values('haha1',NULL);
域完整性
限制单元格内的数据的完整性
CREATE TABLE stu8(
sid int PRIMARY KEY auto_increment,
sname varchar(20) NOT NULL,
sgender VARCHAR(20) DEFAULT '男'
);
引用约束(参照物约束)
主表和从表有依赖关系 从表依赖主表
这时可以给从表添加一个约束 外键约束
CREATE TABLE student1(
sid int PRIMARY KEY,
sname varchar(20)
);
CREATE TABLE score1(
sid int,
score int,
CONSTRAINT fk_stu_score_sidFOREIGN KEY (sid) REFERENCES student1(sid)
);
创建外键的第二种方式
CREATE TABLE student(
sid int PRIMARY key,
sname varchar(20)
);
CREATE TABLE score(
sid int,
score int
);
给sore添加外键
ALTER TABLE score ADD CONSTRAINT fk_student_score_sid FOREIGN KEY(sid)
REFERENCES student(sid);
删除(要使用约束的别名来删除)
一个表可以有多个外键 需要使用约束名字
注意:约束名(外键名字)不能重复
ALTER TABLE score DROP FOREIGN KEY fk_student_score_sid;