SQL语法(MYSQL)

按条件统计

SELECT user_id , SUM( IF( order_info.status = 'dead', 1, 0) )

FROM order_info

GROUP BY user_id;

group_concat( user_id )拼接id

select group_concat( user_id ) as userIds from user_distribution where parent_share_code = d.parent_share_code and apply_type='added'


sql语句分类(操作数据库的语句):

DDL:操作数据库和表;【创建(create)、删除drop)修改:(alter)查(select)数据库或者表

DCL:管理数据库权限grant  if…

DML:操作表中的数据;【增(insert)、删(delete)、改(update

DQL:查询表中的数据select

where和having的区别:

   a)where,having都可以进行筛选,where是分组前筛选,having是分组后筛选,

   b)where不可以跟聚合函数, having是可以跟聚合函数的.

查询语句总结:

   书写顺序:  Select...from...where...group by ...having...order by....

   解析顺序: from...where...group by ...having...select...order by....

and和or, and的优先级高一些.

max/min, sum,count,avg -- 多行函数--聚合函数:聚合函数一般与分组的 group by 一起使用. 用于实现分组后的筛选.按....统计.....

group by having 聚合函数

order by用来排序,  升序 asc / 降序 desc

Java数据类型对应 MySQL的类型:

byte/short/int/long       tinyint /smallint  /int  /bigint

float                             float

double                         double

boolean                        bit

char/String                   char和varchar类型

char和varchar的区别:

  * char代表是固定长度的字符或字符串,不足用空格补全。

   * varchar代表的是可变长度的字符串。

Date                          date/time/datetime/timestamp

datetime和timestamp区别

   * datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中

   * timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。

File                             BLOB/TEXT

创建表之约束及建表:(规范数据的完整性

单表的约束分类:

主键约束:primary key    一个表中的主键只有一个自增也只有一个。

唯一性约束:unique

非空约束:not null

delete from 表名 和truncate table 表名 两种方式的区别:

delete from 表名:是DML语句,一条一条的删除数据,事务可以作用在DML语句上。

truncate table 表名:是DDL语句,先删除表,再创建一个跟之前表一样结构的新表,事务不能作用在DDL语句上。

between.. and..

mysql使用between and处理时间区间不包括右边界。

如:把and后的日期加上一天:
select * from user where create_time between ‘2018-12-6’ and DATE_ADD(‘2018-12-8’, INTERVAL 1 DAY ) ;
把and的日期字符串拼接成 ‘2018-12-8 23:59:59’:
2). mysql日期加减法: DATE_ADD(‘2017-12-30’, interval 1 DAY ) — 加法
DATE_SUB(‘2017-12-31’, interval 1 DAY ) — 减法

if  null函数:将null值转化为“”或0

select sum(if null(eng,0)+chinese+math) from exam;

where子句不能使用聚合函数,如果现在使用带有聚合函数的条件过滤或者分组后过滤,使用having关键字

select … from 表名 where 条件 group by 字段名 hanving 条件 order by asc/desc;

5. 多表查询:

   b)内联接查询:至少有 n-1 个连接条件.

      select * from a, b where a.id=b.aid;

      select * from a  join b on a.id=b.aid;

   c)外联接查询:左外, 右外

           左外显示左边表的全部以及满足条件的部分

          右外显示右边表的全部以及满足条件的部分

 

 

        查询所有的部门中员工的个数.

       select dept.name 部门名称,count(emp.id) 员工个数 from dept left  join emp on dept.id=emp.dept_id group by dept.id;

 

 d)子查询:

     sql语句的嵌套

     in,  exists, any , all

           需求:查询 小丽是 属于哪个部门的.

    select name from dept where id=(select dept_id from emp where name='小丽');

    select d.name from dept d,emp e where d.id=e.dept_id and e.name='小丽';

内联接能够实现就不要用 子查询, 子查询效率 会低很多.

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值