(1)MYSQL——————基礎,函數,分組查詢,子查詢,分頁查詢以及聯合查詢

1,SQL的基礎

2,函數

3,分組查詢

4,連接查詢

5,子查詢

6,分頁查詢

7,聯合查詢

SQL的基礎

1,數據庫的好處:
  • 實現數據持久化
  • 使用完整的管理系統統一管理,易於查詢
2,數據庫的概念:
  • DB
    數據庫( database ):存儲數據的“倉庫”。它保存了一系列有組織的數據。
  • DBMS
    數據庫管理系統( Database Management System )。數據庫是通過 DBMS 創建和操作的容器
  • SQL
    結構化查詢語言( Structure Query Language ):專門用來與數據庫通信的語言。
3,啓動和停止服務SQL:
  • 方式一:通過計算機管理方式
    右擊計算機—管理—服務—啓動或停止MySQL服務
  • 方式二:通過命令行方式(以管理員方式啓動)
    啓動:net start mysql服務名
    停止:net stop mysql服務名
4,MySQL服務的登錄和退出
  • 方式一:通過mysql自帶的客戶端,只限於root用戶
  • 方式二:通過Windows自帶的客戶端只限於登錄:mysql [-h 主機名 -P 端口號] -u用戶名 -p密碼
  • 退出:exit或ctrl+c
5,MySQL常用的命令:
  • 查看 mysql 中有哪些個數據庫: show databases;
  • 使用一個數據庫: use 數據庫名稱;
  • 查看指定的數據庫中有哪些數據表: show tables;
  • 查看錶的結構:desc 表名
  • 查看其它庫的所有表:show tables from 庫名
  • 查看服務器版本:
    方式一:登錄到mysql服務器 select version();
    方式二:沒有登錄到mysql服務端 mysql --version 或 mysql --V
6,mysql中select語句:
  • mysql中加號的作用

①,只要其中的一方爲字符型,試圖將字符型數值轉換成數值型

select '123'+90; ==213

②,如果轉換成功,則做加法運算,如果轉換失敗,則將字符型數組轉換成0

select 'Tommey周'+90; ==90

③,只要其中一方爲null,則結果肯定爲null

select null+90; ==null
  • 拼接函數應使用 concat(‘a’,‘b’)
  • 安全等於<=>:既可以判斷NULL值,又可以判斷普通的數值,可讀性較低
  • is null:僅僅可以判斷null值,可讀性較高

函數

1,字符函數:

在這裏插入圖片描述

  • 大小寫控制函數
select lower('SQL'); ==sql
select upper('sql');  ==SQL
  • 字符控制函數
select CONCAT('Hello', 'Tommey周'); ==》HelloTommey周

select SUBSTR('HelloWorld',1,5); ==》Hello

select LENGTH('HelloTommey周'); ==14

select INSTR('HelloWorld', 'W'); ==6

select LPAD('Tommey周',10,'*'); ==***Tommey周

select RPAD('Tommey周', 10, '*'); ==》Tommey周***

select TRIM('H' FROM 'HelloWorld'); ==》elloWorld

select REPLACE('abcd','b','m'); ==》amcd
2,數字函數:
  • ROUND(四捨五入):
select ROUND(45.926, 2); ==45.93
  • CEIL(向上取整,返回大於等於該參數的最小整數):
select CEIL(45.12); ==46
  • FLOOR(向下取整,返回小於等於該參數的最大整數):
select FLOOR (45.9); ==45
  • TRUNCATE(截斷):
select TRUNCATE(45.926, 2); ==45.92
  • MOD(求餘):
select MOD(1600, 300); ==100
3,日期函數:
  • now(獲取當前日期+時間) :
select now(); ==2020-03-25 22:41:03
  • CURDATE(獲取當前日期) :
select CURDATE(); ==2020-03-25
  • CURTIME(獲取當前時間) :
select CURTIME(); ==22:46:05
  • str_to_date(將日期格式的字符轉換成指定格式的日期):
select STR_TO_DATE('9-13-1999','%m-%d-%Y'); ==1999-09-13
  • date_format(將日期轉換成字符):
select DATE_FORMAT('2018/6/6','%Y年%m月%d日'); ==20180606

在這裏插入圖片描述

4,流程控制函數:
  • if 函數: if else的效果
select if(10 < 5,'我比你小','我比你大'); ==》 我比你大
  • case函數的使用:switch case的效果
SELECT last_name,job_id,salary,CASE job_id 
	WHEN 'IT_PROG' THEN 1.10 * salary
	WHEN 'ST_CLERK' THEN 1.15 * salary
	WHEN 'SA_REP' THEN 1.20 * salary
	ELSE	salary
END "REVISED_SALARY"
FROM employees;
5,分組函數:
  • AVG() 平均值
  • COUNT() 計算個數
select count(distinct real_name) from t_employee;
  • MAX() 最大值
  • MIN()最小值
  • SUM() 求和
  • 可以對 數值型數據使用AVG 和 SUM 函數
  • 可以對 任意數據類型的數據使用 MIN 和 MAX 函數
  • COUNT(*) 返回表中記錄總數,適用於 任意數據類型
  • count(*) ,count(1),count(字段)那個效率高?
    MYISAM存儲引擎下,count(*)的效率高
    INNODB 存儲引擎下,它會使用最小的二級索引來進行 count 的查詢優化,count(*)和count(1)的效率差不多,比count(字段)效率高,字段的話是需要判斷是否爲空

分組查詢

  • group by
select count(*),location_id from departments group by location_id having count(*)>2
  • 分組前篩選 group by子句的前面 WHERE
  • 分組後篩選 group by子句的後面 HAVING
  • 分組函數做條件肯定是放在having子句中
  • 能用分組前篩選的,就優先考慮使用分組前篩選

連接查詢

1,笛卡爾集:
select name,boyName from beauty,boys;
  • 笛卡爾集會在下面條件下產生:
    – 省略連接條件
    – 連接條件無效
    – 所有表中的所有行互相連接

  • 爲了避免笛卡爾集, 可以在 WHERE 加入有效的連接條件。

2,內連接:

在這裏插入圖片描述

SELECT <select_list> FROM A INNER JOIN B ON A. KEY = B. KEY
  • 特點:
    添加排序,分組篩選
    inner可以省略
    篩選條件放在where後面,連接條件放在on後面,提高分離性,便於閱讀
    inner join連接和sql92語法中的等值連接效果是一樣的,都是查詢多表的交集
3,外連接:
  • 應用場景:用於查詢一個表中有,另外一個表沒有的記錄
  • 左外連接
    在這裏插入圖片描述
SELECT <select_list> FROM A LEFT JOIN B ON A.key=B.key
  • 右外連接
    在這裏插入圖片描述
SELECT <select_list> FROM A RIGHT JOIN B ON A.key=B.key
  • 全外
full outer join

內連接 + 左外 + 右外

  • 交叉連接 ‘
cross join

就是笛卡爾乘積

  • 全連接
    在這裏插入圖片描述
    SELECT <select_list> FROM A FULL JOIN B ON A.key=B.key

子查詢

  • 注意事項

    • 子查詢要包含在括號內。
    • 將子查詢放在比較條件的右側。
    • 單行操作符對應單行子查詢,多行操作符對應多行子查詢。
  • 子查詢中的 HAVING 子句

    • 首先執行子查詢。
    • 向主查詢中的HAVING 子句返回結果
  • 單行子查詢比較操作符
    在這裏插入圖片描述

  • 多行子查詢比較操作符
    在這裏插入圖片描述

  • exists(完整的查詢語句)結果1或0

select * from t_employee where exists(select * from t_employee t where t.real_name='T_ommey')

分頁查詢

  • 特點:
    • limit語句放在查詢語句最後
    • 公式((page-1)*size,size) ===》page頁數 size每頁顯示的條數

聯合查詢

  • union:合併、聯合,將多次查詢結果合併成一個結果

  • 語法
    查詢語句1
    union 【all】
    查詢語句2
    union 【all】

  • 意義
    將一條比較複雜的查詢語句拆分成多條語句
    適用於查詢多個表的時候,查詢的列基本是一致

  • 特點
    要求多條查詢語句的查詢列數必須一致
    要求多條查詢語句的查詢的各列類型、順序最好一致
    union 去重,union all包含重複項

下一章,(2)MySQL——————數據操縱語言,數據定義語言,數據類型,約束以及事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章