数据库—Mysql总结(2)

SQL:结构化语言

1. SQL分类:

DDL:数据定义语言:定义数据库对象:库,表,列

DML:数据操作语言:定义数据库记录(增删改查);

DCL:数据控制语言:查询记录

2. DDL:操作数据库,表

1)数据库:

创建数据库:create  database  数据库名

删除数据库:drop   database   数据库名

修改数据库:alter   database  库名  character  set  要修改的字符集名

查询数据库:show  database;//查询所有的数据库名

           Show   create  database  库名;//查询创建的数据库

2)表(stu)

添加列:alter   table  stu  add  name  varchar(20);

修改列的类型:alter  table stu  modify  gender  char(2);

修改列名:alter  table  stu   change   gender  sex  char(2);

删除列:alter   table  stu  drop  name;

修改表名:alter  table  stu rename  to  student;

查询:show tables; 

 查询该数据库下所有表名称       desc 表名; -- 查询表结构
注意:操作表之前,应该先选择一个数据库使用:use 数据库名称;

3.DML:操作表中的数据
1) 增:

insert into 表名(列名1,列名2,...) values(值1,值2,....);

注意:如果表的所有列都添加值,则列名可以省略

insert into stu(sname,age) values("lisi",23);

insert into stu(sname,age,sex) values("zhangsan",23,'1');

insert into stu values("ww",23,'2');

2)删:

delete from 表名 [where 条件];

truncate table 表名;-- 删除所有记录, 先删除表,再创建表。

             delete from stu where sname = 'lisi'
3) 改:
update 表名 set 列名1 = 值1 , 列名2 = 值2... [where 条件]
update stu set sex = "1" where sname = "lisi";

4.DQL:查询
       SELECT 
selection_list /*要查询的列名称*/
FROM 
table_list /*要查询的表名称*/
WHERE 
condition /*行条件*/
GROUP BY 
grouping_columns /*对结果分组*/
HAVING 
condition /*分组后的行条件*/
ORDER BY 
sorting_columns /*对结果分组*/
LIMIT 
offset_start, row_count /*结果限定*/

1)条件查询:where 子句
=、!=、<>(不等于)、<、<=、>、>=;
BETWEEN…AND;  在什么范围之间
IN(set); IS NULL;为空  IS NOT NULL 不为空
AND; 并且   OR;   或者   NOT;非

2) 模糊查询:like

 通配符
_:匹配单个任意字符
       %:匹配多个任意字符

3)字段控制:
  修改字段的别名:AS (可以省略)
给字段起别名:
例如:   select sname as 姓名, sage 年龄 from student;
给运算字段起别名:
例如: select sname as 姓名, (工资+奖金) as 总收入 from student;
      给表起别名:给每一张表起一个别名。简化书写
` 例如: select stu.sname, stu.sage from student as stu;
  字段运算:
 null参与的运算,结果都为null  
比如 工资 是100  奖金是null  我们让这两个字段运算 那结果就为null
 一般会将null替换为0: ifnull(字段名称,如果是null的替换值)  ifnull 是mysql的方言
所有如果奖金字段为null 一般我们把奖金替换为0
例如: select sname,(工资+ifnull(奖金,0)) as 总收入from student;
去除重复记录   比如我查询工资是3000的 出现了多条工资为3000 的记录 那我只想展示一条3000的记录  所以可以用 distinct 去除重复记录
 4) 排序: order by  默认升序排列  ASC 默认值                DESC 降序排列
按工资从小到大排
select * from student order by 工资 asc;
按工资从大到小排
select * from student order by 工资 desc 
如果出现多条工资一样的 那我们可以指定第二排序条件 
select * from student order by 工资 desc,奖金desc;
 
5)聚合函数:聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数; 统计个数的 比如我统计有多少个学生
select count(sid) from student;  或者传个星 号    select count(*) from student;         一般不要传有null 值的字段
                        MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  例如 查询工资最大值    select max(工资) as 最高工资 from student;

MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
例如 查询 最少工资   select min(工资) as 最小工资 from student;
SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
例如 计算总工资  select sun(工资) as 总支出 from student;


AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:计算平均 工资 select avg(工资) as 平均工资 from student;
6)分组查询:group by     一般配合聚合函数使用 查出的数据才有意义
查询的字段:
1.分组字段本身
2.聚合函数
比如我按部分编号分组  比如有三个部门 然后我求每个部门的平均工资  那展示出来的数据应该有三条
例如: select 部门编号,AVG(工资) from student group by 部门编号;
1.例如查询 每个部门的部门编号 已经每个部门工资大于1500的人数
select 部门编号, count(*) from student where 工资>1500 group by 部门编号;
注意这里的 where 是对分组前的条件限定 也就是说不满足条件的 不参与分组
********where和having
* where:在分组之前对条件进行限定。不满足条件,就不会参与分组
* having:在分组之后,对结果集的筛选
2.例如 我要查询 各个部门平均工资 大于2000 的部门
    select 部门编号,avg(工资) from student group by 部门编号 having avg(工资)>2000;
3. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门
    首先查询各个部门 那肯定要按部门编号分组 分组前的条件限定是 员工工资大于1500的才参与分组计算出平均工资  然后对结果再进行筛选 筛选出 平均工资 大于2000的部门
  select 部门编号,avg(工资) from student group by 部门编号 where avg(工资)>1500 having  avg(工资)>2000;
7)分页查询:limit
  limit 0,5 开始的记录索引, 每一页显示的条数     索引从0开始
  开始的记录索引  = (页码-1)*每一页显示的条数
   例如 我显示第一页  每页5条记录
select * from student limit 0,5 ;  这是第一页 5 条记录
select * from student limit 5,5 ; 这是第二页 5条记录
select * from student limit 10,5 这是第三页 5条记录

* oracle:rownum 分页方言
* sqlserver:top 分页方言
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值