城管希课堂之终于来到数据库

SELECT * FROM 表名;上来啥也不写先写这个!

查询指定列

SELECT sid FROM stu;

条件查询介绍

条件查询就是在查询时给出WHERE子句.在WHERE子句中可以使用如下运算符及关键字:

= != <> < <= > >=     != <> 一样

BETWEEN...AND 范围查询 age BETWEEN 18 AND 30;

IN(set) 固定范围之内 用逗号隔开

IS NULL 是空

IS NOT NULL 不是空

AND 与 &&

or 或 ||

NOT 非 !

2.2 查询性别为女,并且年龄50的记录
SELECT * FROM stu 
WHERE gender='female' AND ge<50;

2.3 查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu 
WHERE sid ='S_1001' OR sname='liSi';

2.4 查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu 
WHERE sid IN ('S_1001','S_1002','S_1003');

2.5 查询学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM tab_student 
WHERE s_number NOT IN ('S_1001','S_1002','S_1003');

2.6 查询年龄为null的记录
SELECT * FROM stu
WHERE age IS NULL;

2.7 查询年龄在20到40之间的学生记录
SELECT * 
FROM stu
WHERE age>=20 AND age<=40;
或者
SELECT * 
FROM stu 
WHERE age BETWEEN 20 AND 40;

2.8 查询性别非男的学生记录
SELECT * 
FROM stu
WHERE gender!='male';
或者
SELECT * 
FROM stu
WHERE gender<>'male';
或者
SELECT * 
FROM stu
WHERE NOT gender='male';

2.9 查询姓名不为null的学生记录
SELECT * 
FROM stu
WHERE sname IS NOT NULL;
或者
SELECT * 
FROM stu
WHERE NOT sname IS NULL;


去除重复记录 需要使用DISTINCT

SELECT DISTINCT sal FROM emp;


任何数据和null相加都是null

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

过滤空值 空的就变成0 不空就是原来的值


添加别名  AS

SELECT *,sal + IFNULL(comm,0)  AS 别名 FROM emp;

给列起别名的时候可以省略AS


排序  ORDER BY

SELECT * FROM emp ORDER BY age ASC;

SELECT * FROM emp ORDER BY age  DESC;


模糊查询  LIKE

SELECT * FROM emp WHERE ename LIKE '%三%'

_一个字符

%0~n 个字符


聚合函数

COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

6.1 COUNT
当需要纵向统计时可以使用COUNT()。
查询emp表中记录数:
SELECT COUNT(*) AS cnt FROM emp;

查询emp表中有佣金的人数:
SELECT COUNT(comm) cnt FROM emp;
注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。

查询emp表中月薪大于2500的人数:
SELECT COUNT(*) FROM emp
WHERE sal > 2500;

统计月薪与佣金之和大于2500元的人数:
SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;

查询有佣金的人数,有领导的人数:
SELECT COUNT(comm), COUNT(mgr) FROM emp;

6.2 SUM和AVG (自动过滤空值)
当需要纵向求和时使用sum()函数。
查询所有雇员月薪和:
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;

6.3 MAX和MIN
查询最高工资和最低工资:
SELECT MAX(sal), MIN(sal) FROM emp;

分组查询 GROUP BY

当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部门来分组。
注:凡和聚合函数同时出现的列名,一定要写在group by 之后


WHERE后面不能跟聚合函数 

having 是分组以后使用的筛选关键字

注:having与where的区别:
1.having是在分组后对数据进行过滤

  where是在分组前对数据进行过滤

WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;

而HAVING是对分组后数据的约束。


分页LIMIT

LIMIT用来限定查询结果的起始行,以及总行数。


8.1 查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;


注意,起始行从0开始,即第一行开始!


8.2 查询10行记录,起始行从3开始

SELECT * FROM emp LIMIT 3, 10;


数据的完整性
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束


完整性的分类:
实体完整性:一条记录 就是一个实体
域完整性:
引用完整性:


1、实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复。

约束类型: 主键约束(primary key)  唯一约束(unique)  自动增长列(auto_increment)

第一种添加方式:
CREATE TABLE student(
id int primary key,
name varchar(50)
);

第二种添加方式:此种方式优势在于,可以创建联合主键
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
联合主键是一个主键 只要两个字段不完全一样 就可以
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
);
第三种添加方式:
CREATE TABLE student(
id int,
name varchar(50)
);
ADD CONSTRAINT(添加约束)

ALTER TABLE student  ADD CONSTRAINT  PRIMARY  KEY (id);


1.2唯一约束(unique):
特点:数据不能重复。(可以有空值)
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique

);

1.3自动增长列(auto_increment)  
 sqlserver数据库叫 (identity)  oracle数据库叫( sequence)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值