sql之查詢語句的基本操做詳解上

### Select查詢語句分類shell

  • 簡單查詢語句
    • 從一個表中查詢數據
  • 複雜查詢語句
    • 多表鏈接查詢 (未來源於多個表的列橫向疊加)
      • 內鏈接
      • 左鏈接
      • 右鏈接
      • 全鏈接
      • 自鏈接
      • 非等值鏈接
    • 複合查詢(將查詢結果集上下疊加)
      • Union
      • Union All
      • Intersect
      • Minus
    • 子查詢
      • 非關聯子查詢
      • 關聯子查詢

查詢語句語法結構

SELECT select_list  #select_list 要顯示的列,列之間用逗號隔開,列也稱做投影
[ INTO new_table ]  # 結果集導入新表
FROM [table_source] #表名 
[ WHERE search_condition ] #錶行過濾條件
[ GROUP BY group_by_expression ]  #按照指定的列將錶行分組
[ HAVING search_condition ] #對分組後的新行進行過濾  
[ ORDER BY order_expression [ ASC | DESC ] ] #按照指定的1個或多個列進行排序,ASC增序,DESC降序

select中經常使用運算符

  • 算數運算符:
    • + 加法運算
    • - 減法運算
    • * 乘法運算
    • /或DIV 除法運算
    • % 或MOD 求餘運算
  • 邏輯運算符:
    • and 並且
    • or 或者
    • xor 異或
    • not或! 非
  • 比較運算符:
    • = 等於
    • != 或<>不等於
    • > 大於
    • < 小於
    • >= 大於等於
    • <= 小於等於;
    • <=> 嚴格比較兩個NULL值是否相等,同爲NULL時爲真
    • is null 爲空值
    • is not null 爲非空值;
    • in (值列表) 在值列表中
    • not in (值列表)不在值列表中;
    • between 低值 and 高值 (包含低值和高值)在低值和高值之間;
    • not between 低值 and 高值 (包含低值和高值)不在低值和高值範圍內;
    • like ‘通配符’ 按照通配符進行匹配;
      • % 匹配0個或任意多個字符
      • _ 匹配任意1個字符
  • 位運算符
    • & 按位與
    • | 按位或
    • ^ 按位異或
    • ! 取反
    • << 左移
    • >> 右移
  • 賦值運算符
    • := 用於select語句中的賦值,
  • 運算符優先級
優先級 運算符
1 !
2 ^
3 *,/,DIV,%,MOD
4 -,+
5 <<,>>
6 &
7 |
8 =,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN
9 BETWEEN,CASE,WHEN,THEN,ELSE
10 NOT
11 &&,AND
12 ||,OR,XOR
13 :=

select where子句

  • stu表數據以下 image-20191127143147761
  • 查詢學生表中性別爲'女',體重超過60公斤的學生的全部信息 image-20191127142809675
  • 查詢學生表中1班或者2班中,身高超過190的學生
    image-20191127142923218
  • 查詢學生表中3班學生裏面考分在400和520之間的女生 image-20191127143111204
  • 查詢學生表中沒有分配班級並且是女生的學生 image-20191127143249233
  • 在學生表體重低於40公斤且身高低於1.65米的學生,列出其姓名,身高,體重,總分以及總分佔750分滿分的百分比 image-20191127143530710
  • 在學生表中查找學生姓名,第二個字是‘侯’,或者 第一個字是‘張’且名字只有兩個
    image-20191127143724804

函數

  • 函數用來處理SQL語句中的數據,能夠嵌入在SQL語句中使用,增長了SQL語句對數據的處理功能數據庫

    • 函數能夠有0到多個參數,可是總會有一個返回值
    • 函數能夠用來計算、修改、格式化輸出二維表中的各種數據
    • 不一樣數據庫的函數的名稱和用法略有不一樣,但都會提供如:字符串處理、數值處理、日期處理、統計等分類的函數、方便用戶處理各種數據
  • 經常使用字符串函數express

    • char_length(str) 計算給定字符串長度函數

      image-20191127144143374

    • concat(str1,str2...) 字符串拼接編碼

      image-20191127144436508

    • substr(str,pos,len) 字符串str從pos位置(1開始)開始截取len個字符spa

      image-20191127144726414

  • 經常使用數值函數3d

    • round(num,n) 數值num對n+1位進行四捨五入運算,正數表示保留的小數位,負數表示對整數位進行四捨五入,0表示四捨五入取整code

      image-20191127145058922

  • 經常使用日期函數blog

    • year(date) 對日期date取年份排序

      image-20191127150809181

    • month(date) 對日期date取月份

      image-20191127150922189

    • curdate() 獲取當前日期

      image-20191127151014210

    • curtime() 獲取當前時間

      image-20191127151045436

    • now() 獲取當前時間

      image-20191127151127752

    • datediff(date1,date2) 返回date1與date2之間相隔的天數(date1-date2)

      image-20191127151359574

      也能夠這樣寫

      image-20191127151424890

      image-20191127151439549

  • 經常使用條件判斷函數

    • if(expr,v1,v2) 若是表達式expr成立返回v1,不成立返回v2

      image-20191127151659946

      也能夠進行嵌套

      image-20191127151902239

      image-20191127165142041

      select sname,score,if(score>600,'優秀',if(score>500,'良好',if(score>400,'合格','不合格'))) from stu ;
      	select sname,substr(sname,if(sname in('大喬','小喬'),2,1 ),if(substr(sname,1,2) in('諸葛','夏侯','太史'),2,1)) 姓氏 from stu;
      	#substr(sname,if(sname in('大喬','小喬'),2,1 ),if(substr(sname,1,2) in('諸葛','夏侯','太史'),2,1)) 姓氏 表示使用姓氏做爲別名代替原有的列名
  • CASE運算

    • 能夠添加多個條件判斷,比單個if更加靈活

    • 語法格式:case when expr1 then v1 [when expr2 v2 then] …… else vn end

      image-20191127152600651

      select sname,score,(case when score>600 then '優秀' when score >500 then '良好' when score>400 then '合格' else '不合格' end)level from stu;
  • 經常使用空值處理函數

    • 當表中有空值時,任何運算與函數的返回結果均爲null

      image-20191127153039406

    • ifnull(v1,v2) 若是v1爲null則返回v2不然返回v1

      image-20191127153308851

      顯示出2班與未分班的學生

    • isnull(expr) 若expr爲空返回1不然返回0

      image-20191127153634092

      顯示全部未分班的學生

  • 經常使用聚合函數

    • max(col) 返回最大值,列的數據類型能夠是數值、字符、日期型

      image-20191127154218718

    • min() 返回最小值,列的數據類型能夠是數值、字符、日期型

      image-20191127154646401

    • sum() 列求和,列的數據類型不能是字符型

      image-20191127154727585

    • avg() 求平均值,列的數據類型不能是字符型

      image-20191127154748231

    • count() 統計,列中的若是有空值不會被統計計數

      image-20191127154818802

  • DISTINCT關鍵字

    • 用於去除重複記錄,須要放在第一個字段前

      image-20191127154953839

  • 別名

    • 爲表或列設置代替的名稱顯示

    • 列別名語法格式:select sname [as] 別名 from table;as可省略

      image-20191127155257432

    • 表別名語法格式:select 表別名.字段名,表別名.字段名... from 代表 [as] 表別名;

      image-20191127155703186

  • order by排序

    • 對查詢結果集按照order by後面指定的1列或多列排序

      • 分爲升序和降序
        • 升序 ASC,默承認以不寫
        • 降序 DESC
      • 對於數值,升序是從小到大,降序是從大到小
      • 對於日期和時間,升序是從遠到近,降序是從近到遠
      • 對於英文字符,升序是從a到z,降序是從z到a
      • 對於中文字符,升序按照字符集編碼從小到大,降序按照字符集編碼從大到小,若是選擇gbk編碼能夠按照拼音來排序
      • 對於排序列的名稱,能夠用如下方式
        • 列名
        • 列別名
        • 列的序號
        • 函數
        • 表達式
    • 按照學生成績由高到低排序顯示

      image-20191127192209472

    • 按照學生年齡由老到幼排序

      image-20191127192635261

    • 按照姓名首字母排序

      image-20191127192855403

      注:convert(sname using gbk) 用於轉換所使用的字符集

  • limit 區域顯示

    • 用於顯示查詢結果中的部份內容

    • LIMIT子句最後執行

    • 語法格式:limit N,M 由第N條顯示M條記錄,N從0開始,省略N默認爲0

      image-20191127160331402

相關文章
相關標籤/搜索