数据库查询栗子

在这里插入图片描述

  去除重复数据 distinct
  注意:查询的所有数据完全相同才能去除重复的
  查询emp表中所有薪金

SELECT DISTINCT
ename,
sal
FROM
emp;

  查看雇员的月薪与佣金之和
  sal+comm两列值相加并且组成一个新的字段
  值和null相加只能返回null
  IFNULL(expr1,expr2) 如果expr1为null就用expr2代替

SELECT
ename,
sal + IFNULL(comm, 0)
FROM
emp;

  给查询的字段起别名 AS(可以省略)

SELECT
ename,
sal + IFNULL(comm, 0) AS total
FROM
emp;

  排序order by
  查询所有学生记录,按年龄升序排序 ASC

SELECT
*
FROM
stu
ORDER BY
age ASC;

  查询所有学生记录,按年龄降序排序 DESC

SELECT
*
FROM
stu
ORDER BY
age DESC;

  查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

SELECT
*
FROM
emp
ORDER BY
sal DESC,
empno ASC;

  聚合函数  sum avg max min  count(总记录数)
  查询emp表中记录数:可以去除null值

SELECT
COUNT( * )
FROM
emp;

  查询emp表中月薪大于2500的人数:

SELECT
COUNT( * )
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)
FROM
emp;

  查询所有雇员月薪和,以及所有雇员佣金和:

SELECT
SUM(sal),
SUM(comm)
FROM
emp;

  查询所有雇员月薪+佣金和:

SELECT
SUM(sal + IFNULL(comm, 0))
FROM
emp;

  统计所有员工平均工资:

SELECT
AVG(sal)
FROM
emp;

  查询最高工资和最低工资:

SELECT
MAX(sal),
MIN(sal)
FROM
emp;

  分组查询 GROUP BY
  查询每个部门的部门编号和每个部门的工资和:
  按什么分组 前面查询的字段就是什么 保证查询结果数量对等

SELECT
deptno,
SUM(sal)
FROM
emp
GROUP BY
deptno;

  查询每个部门的部门编号以及每个部门的人数:

SELECT
deptno,
COUNT( * )
FROM
emp
GROUP BY
deptno;

  查询每个部门的部门编号以及每个部门工资大于1500的人数:
  WHERE 条件要加在group by 的前面

SELECT
deptno,
COUNT( * )
FROM
emp
WHERE
sal > 1500
GROUP BY
deptno;

  查询工资总和大于9000的部门编号以及工资和:
  1.WHERE 后面不能有聚合函数 
  2.分组之后如果要添加筛选条件 需要是要having 后面可以用聚合函数
  3.WHERE条件是在分组之前进行筛选,having是在分组后进行筛选

SELECT
SUM(sal),
deptno
FROM
emp
GROUP BY
deptno
HAVING
SUM(sal) > 9000;

  分页查询 关键词 LIMIT(mysql方言)
  limit 从第几条显示数据,一共显示多少条数据

SELECT
*
FROM
emp
LIMIT 3,3;

  起始页 = (pageSize -1) * 一页多少条数据
  limit要写在所有的条件后面
  模糊查询 LIKE
  使用占位符 %多个字符  _一个下划线表示一个字符

SELECT
*
FROM
emp
WHERE
ename LIKE ‘%s%’;

  数据完整性(保证用户插入的数据有效的)
  引用完整性(多张表依赖的关系)
  域完整性 (一个单元格的完整性)
  实体完整性(保证一条数据的完整性) 主键 唯一键 主键自增
  主键 特点 唯一 且不能为空 可以做精准删除
  唯一键 特点 唯一 可以为空 
  设置主键方式一

CREATE TABLE stu1 (
sid INT PRIMARY KEY,
sname VARCHAR (50)
);

  设置主键方式二 可以创建联合主键(用两个字段同时当主键) 
  注意 联合主键都相同才算重复

CREATE TABLE stu2 (
sid INT,
sname VARCHAR (50),
PRIMARY KEY (sid)
);

CREATE TABLE stu3 (
classId INT,
sid INT,
sname VARCHAR (50),
PRIMARY KEY (classId, sid)
);

  设置主键方式三先创建出来表 在添加主键约束

CREATE TABLE stu4 (sid INT, sname VARCHAR(50));

ALTER TABLE stu4 ADD CONSTRAINT PRIMARY KEY (sid);

  删除主键约束

ALTER TABLE stu4 DROP PRIMARY KEY;

  唯一键约束 可以插空 但是不能重复

CREATE TABLE stu5 (
sid INT PRIMARY KEY,
sname VARCHAR (50) UNIQUE
);

INSERT INTO stu5
VALUES
(3, NULL);

  主键自增

CREATE TABLE stu6 (
sid INT PRIMARY KEY auto_increment,
sname VARCHAR (50) UNIQUE
);

  注意 主键只能自增 删除了也不会倒退
  插入时可以给null 让他自己自增
  域完整性 not null(非空)   default 默认值

CREATE TABLE stu7 (
sid INT PRIMARY KEY auto_increment,
sname VARCHAR (50) NOT NULL,
sgender VARCHAR (50) DEFAULT ‘男’
);

INSERT INTO stu7 (sname)
VALUES
(‘hanhan’);

  有默认值约束 直接插入null 可以 要使用默认值 可以不插入该字段
  引用完整性 参照物约束
  表和表之间的关系
  一对一 一对多  多对多(常用)
  学生表(主)和分数表(从) 可以通过外键来建立两张表之间的关系
  外键建立的方式一 明确外键在从表中

CREATE TABLE student (
sid INT PRIMARY KEY,
sname VARCHAR (50)
);

  外键别名规范 fk_主表名_从表名_字段名
   constraint 外键别名 foreign key (从表中的字段) references 主表名 (主表中的字段)

CREATE TABLE score (
sid INT,
score INT,
CONSTRAINT fk_student_score_sid FOREIGN KEY (sid) REFERENCES student (sid)
);

  创建外界方式二

CREATE TABLE student1 (
sid INT PRIMARY KEY,
sname VARCHAR (50)
);

CREATE TABLE score1 (sid INT, score INT);

  添加外键约束

ALTER TABLE score1 ADD CONSTRAINT fk_student1_score1_sid FOREIGN KEY (sid) REFERENCES student1 (sid);

   删除外键 (一个表中可能有多个外键)

ALTER TABLE score1 DROP FOREIGN KEY fk_student1_score1_sid;

  多对多的关系

CREATE TABLE teacher (
tid INT PRIMARY KEY,
tname VARCHAR (50)
);

CREATE TABLE studentX (
sid INT PRIMARY KEY,
sname VARCHAR (50)
);

  中间表

CREATE TABLE teacher_studentX (tid INT, sid INT);

  添加外键(多对多的关系 外键在中间表中)

ALTER TABLE teacher_studentX ADD CONSTRAINT fk_teacher_studentX_stuedntX_sid FOREIGN KEY (sid) REFERENCES studentX (sid);

ALTER TABLE teacher_studentX ADD CONSTRAINT fk_teacher_studentX_teacher_tid FOREIGN KEY (tid) REFERENCES teacher (tid);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值