表的增删查改

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

一.增

Create(创建)

1.创建表格

注:主键(primary key)是从众多具有唯一性的属性列中选择的一列,主键只有一个,而其余属性列的唯一性也需要保证,则使用唯一键(unique key)。

2.插入数据

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...

指定列插入---全列插入---插入多组数据

 二.查

Retrieve(读取)

SELECT
	[DISTINCT] {* | {column [, column] ...}
	[FROM table_name]
	[WHERE ...]
	[ORDER BY column [ASC | DESC], ...]
	LIMIT ...

1.全列查询----指定列查询

 2.查询字段为表达式

 3.结果去重(distinct)

 4.排序

order by 列 默认(asc升序)/desc(降序)

 注意:order by可以加别名,是因为排序一般是最后的步骤,已经生成了id,name,total的这个表格才可以进行排序

5.条件查询(where)

= ,<=> 等于,判断是否为NULL时 ,使用<=> 
!=, <> 不等于

IS NULL 、IS NOT NULL

例如找出英语成绩及格的学生/号码为空的学生

注意:<=>不建议使用,建议使用 IS NULL和IS NOT NULL

BETWEEN a0 AND a1 范围匹配:[a0, a1]


IN (option, …) :如果是 option 中的任意一个,返回 TRUE(1)

 LIKE :模糊匹配,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

 

AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

 

 筛选分页结果 limit 数字 offset 数字/limit 数字,数字

三.改

1.Update(更新)---修改表数据

作用:是修改数据库某个表中的数据行,一般配合where使用,不限定条件时表中所有数据都会被修改,且默认修改所有数据。

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

更新一列--更新多列

 

2.alter--修改表字段

作用:修改库、修改表、修改字段,它改变了表的结构。

alter table <表名>

[add <新字段名><数据类型><约束条件>]添加新的字段

[drop <字段>]删除表中某个字段

[modify <字段><数据类型>]修改字段的类型

[change <旧字段名><新字段名><数据类型>]修改字段的类型和名称

四.删

1.Delete(删除)

说明:删除内容不删除定义,不释放空间

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

2.drop(删除)

说明:删除内容和定义、释放空间。即把整个表去掉不能再增加数据

3.Truncate(删除) 

说明:删除内容、释放空间但不删除定义,即数据表的结构还在

五.聚合函数

               函数                             说明
COUNT([DISTINCT] expr)         返回查询到的数据的数量
SUM([DISTINCT] expr) 

         返回查询到的数据的总和

AVG([DISTINCT] expr)        返回查询到的数据的平均值
MAX([DISTINCT] expr)       返回查询到的数据的最大值
MIN([DISTINCT] expr)       返回查询到的数据的最小值

例1. 统计班级共有多少同学

-- 使用 * 做统计,不受 NULL 影响

-- 使用表达式做统计

 例2. 统计数学成绩总分

  例3. 统计平均总分

group by子句的使用

在select中使用group by 子句可以对指定列进行分组查询

select column1, column2, .. from table group by column;

例.准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)

EMP员工表

DEPT部门表

SALGRADE工资等级表

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
  `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);


DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);


DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '等级',
  `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',
  `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
);


insert into dept (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into dept (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into dept (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);

insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

----如何显示每个部门的平均工资和最高工资

 显示平均工资低于2000的部门和它的平均工资

 --having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。

where和having不冲突相互补充:having是在完成整个分组聚合统计后,再筛选;where是在聚合前

SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值