sql语句总结

 

数据库

创建数据库

create database 数据库名称 [character set 字符集 collate 字符集校对规则];

查看数据库服务器中所有的数据库

show databases;

查看当前正在使用的数据库

select database();

查看某个数据库的定义信息

show create database 数据库名称;

修改数据库

alter database 数据库名称 character set 字符集 collate 校对规则;

删除数据库

drop database 数据库名称;

切换数据库

use 数据库名称;

表   (实体)

创建

create table 表名称 (字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);

查看某个数据库下的所有的表

show tables;

查看某个表的结构信息

desc 表名;

删除表

drop table 表名;

构     

添加列(字段)

alter  table 表名     add 列名 类型(长度) 约束;

删除列(字段)

alter  table 表名     drop 列名;

修改(字段)类型,长度和约束

    1. alter  table 表名   modify 列名 类型(长度) 约束;

修改(字段)名称

    1. alter  table 表名   change 旧列名 新列名 类型(长度) 约束;

修改表名

    1. alter  table 表名   rename to 新表名
    2. rename  table 表名 to 新的表名;                 //简化版

修改表的字符集

    1. alter  table 表名  character set 字符集;

列 (字段) 以及  记录     (纵是列,行是记录)

添加某几列数据

insert into  user(id,username,password)  values(null,'aaa','123');

添加所有列数据

insert into  user   values(null,'bbb','123',23,'1993-09-01');

修改表的记录

    1. update 表名 set 列名=值,列名=值 [where 条件];

修改某一列的所有值

update user set password = 'abc';

按条件修改数据

update user set password = 'xyz' where username = 'bbb';

按条件修改多个列

update user set password = '123' , age = 34 where username='aaa';

删除表的记录

    1. delete from 表名 [where 条件];

删除某一条记录

delete from user where id = 2;

删除表中的所有记录

delete from user;                   //dml语言可逆转

删除表中的所有记录

truncate  table  user;             //ddl语言 不可逆转

 

 

 

                                                                                   记      录  (  实   例   )

查看表的记录

select  [distinct]  *|列名   from 表    [条件];    // “ |”是或者的意思,不是让你写

                     *”代表所有列(所有字段或一条完整记录)  “[ ]”表示里面东西可以省略不写

查询所有学生考试成绩信息

Select  *  from  exam;

查询所有学生的姓名和英语成绩

Select  name , english  from  exam;

查询英语成绩信息

不显示重复的值

select  distinct  english from exam;

查看学生姓名和学生的总成绩

Select name, english + chinese + math from exam;

别名查询

select name,english+chinese+math as sum from exam;

//as可省略

 

as用法:加as相当于把as前的字段或表名赋给as后的字母来代替它,就像起个别名一样,作用就是看起来更简洁方便。 一般我们直接省略as,比如下面的c  sc均是别名 :

 

 

  1. 条件查询
    1. 使用where子句
      1. > , < , >= , <= , <>,=   

  <>”:表示不等于

      1. like:模糊查询
      2. in:范围查询
      3. not in : 范围外查询(或不在该范围内的数据)
      4. 条件关联:and , or ,not

 

like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。

_只能代表一个字符,

而%可以代表任意个字符。

* like ‘李_’:名字中必须是两个字,而且是姓李的。

* like ‘李%’:名字中姓李的学生,李子后可以是1个或任意个字符。

* like ‘%四’:名字中以四结尾的。

* like ‘%王%’:只要名称中包含这个字就可以。

查询李四学生的成绩:

select * from exam  where name = '李四';

查询名称叫李四学生并且英文大于90分

select * from exam where name = '李四' and english > 90;

查询姓李的学生的信息

select * from exam where name like '李%';

查询英语成绩是69,75,89学生的信息

select * from exam where english in (69,75,89);

排序查询

    1. order by 字段名称 [asc/desc];

查询学生信息,并且按照语文成绩

进行排序

select * from exam order by chinese;

查询学生信息,并且按照语文成绩

倒序排序

select * from exam order by chinese desc;

查询学生信息,按照语文成绩进行倒序排序

如果成绩相同按照英语成绩升序排序

select * from exam  order by chinese desc , english asc;

//同类字句,用逗号分开

查询姓李的学生的信息,

按照英语成绩降序排序

select * from exam where name like '李%'   order by english desc;  

//异类字句 用空格隔开。

同类多个字句规则加逗号“”分开,where字句用and,or不能用“

异类多个字句规则加空格“ ”分开

 

聚合函数使用

sum();

获取所有学生的英语成绩的总和:

select sum(english) from exam;

获取所有学生的英语成绩

和数学成绩总和

select sum(english),sum(math) from exam;

查询姓李的学生的英语成绩的总和

select sum(english) from exam where name like '李%';

查询所有学生各科的

总成绩

select sum(english)+sum(chinese)+sum(math) from exam;

select sum(english+chinese+math) from exam;

上面两种方式正常情况,结果是一样的,但如果有数据为null结果就不一样了。

sum()函数可以识别null,运算时会把null作为0参与运算。

而如果直接用我们写的“+”,他不能识别null,null加任何数等于null,所以会把与它相加的数据丢失掉;

办法:使用ifnull( ,0)函数做给null值赋0值的处理,(下例假如English中含有null)

Select sum(ifnull(english,0)+chinese+math) from exam;

count();

获得学生的总数

select count(*) from exam;

获得姓李的学生的个数

select count(*) from exam where name like '%';

max();

获得数学成绩的最高分:

select max(math) from exam;

min();

获得语文成绩的最小值

select min(chinese) from exam;

avg();

获取语文成绩的平均值

select avg(chinese) from exam;

 

分组查询

group by 字段名称          按什么统计字段名就是什么,分组后就不存在重复字段。

按商品名称统计,

每类商品所购买的个数:

Select  product,count(*)  from orderitem   group by product;

按商品名称统计,

每类商品所花费的总金额:

Select  product,sum(price)   from orderitem  group by product;

按商品名称统计,

统计每类商品花费的总金额在5000元以上的商品

select product,sum(price) from orderitem  group by product having sum(price) > 5000;

按商品名称统计,

统计每类商品花费的总金额在5000元以上的商品,

并且按照总金额升序排序

select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc;

where的子句中不能用聚合函数

如果还想带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having来代替where。

规定格式:

    1. S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
    2. 选择      从          哪里,       分组     有          顺序。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值