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='小麗';

內聯接能夠實現就不要用 子查詢, 子查詢效率 會低很多.

 

 

發佈了70 篇原創文章 · 獲贊 16 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章