1. 程式人生 > 實用技巧 >Windows安裝OpenSSH服務

Windows安裝OpenSSH服務

資料庫概述

一、資料庫的好處

  • 可以持久化資料到本地
  • 結構化查詢
    二、資料庫常見概念
  • DB:資料庫,儲存資料的容器
  • DBMS:資料庫管理系統,又稱為資料庫軟體或資料庫產品,用於建立或管理DB
  • SQL:結構化查詢語句,用於和資料庫通訊的語言,不是某個資料庫軟體特有的,而是幾乎所有主流資料庫軟體通用的語言
    三、資料庫儲存資料的特點
  • 資料存放到表中,然後表再放到庫中
  • 一個庫中可以有多張表,每張表具有唯一的表名來標識自己
  • 表中有一個或多個列,列又稱為“欄位”
  • 表中的每一行資料,相當於jave中的物件
  • 函式:類似於java的方法

單行函式

length
concat
substr
instr
trim
upper
lower
ipad
read
replace

一、字元函式

  1. length 獲取引數數值的位元組字數
  2. concat 拼接字串
  3. upper、lower 轉大寫小寫

某個函式的返回值可以充當另一個函式的引數

  1. substr、substring 擷取字串

SELECT CONCAT(UPPER(SUBSTR(LAST_NAME,1,1)),'_',LOWER(SUBSTR(LAST_NAME,2))) OUT_PUT FROM EMPLOYEES;

  1. instr 返回子串第一次出現的索引,如果找不到返回0
  2. trim 去掉前後空格

SELECT LENGTH(TRIM(' 王思揚 ')) AS OUT_PUT;

SELECT TRIM('A' FROM 'AAAA王思揚AAAAA')

;

  1. lpad 用指定的字元實現左填充指定長度

SELECT LPAD('殷素素',2,'*') AS out_put;

  1. rpad 用指定的字元實現右填充指定長度
  2. replace 替換

二、數學函式

  • round 四捨五入
  • ceil 向上取整,返回>=該引數的最小整數
  • floor 向下取整,返回<=該引數的最大整數
  • truncate 截斷
  • mod 取餘 公式: a -⌊ a/b⌋ * b

三、日期函式

  • now 返回當前系統日期+時間
  • curdate
  • curtime
  • YEAR MONTH 年月日時分秒
  • str_to_date 將字元通過指定的格式轉換成日期
  • date_format 將日期轉換成字元

四、其他函式

  • VERSION();
  • DATABASE();
  • USER();

五、流程控制函式

  • if函式; if else的效果

  • case函式

    case 要判斷的欄位或表示式
    when 常量1 then 要顯示的值1或語句2
    when 常量2 then 要顯示的值2或語句2
    ···
    else 要顯示的值n或語句n;
    end
    SELECT salary 原始工資, department_id,
    CASE department_id
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE salary
    END AS 新工資
    FROM employees;
    
    case
    when 條件1 then 要顯示的值1或者語句1
    when 條件2 then 要顯示的值2或者語句2
    ···
    else 要顯示的值n或語句n
    end
    SELECT salary,
    CASE
    WHEN salary>20000 THEN 'A'
    WHEN salary>15000 THEN 'B'
    WHEN salary>10000 THEN 'C'
    ELSE 'D'
    END
    

分組函式

功能:用作統計使用,又稱為聚合函式或統計函式或組函式

分類:

sum 求和 、avg 平均數、max 最大值、 min 最小值 、 count 計算個數

count函式的詳細介紹

匹配多列中值不為null或者0的都+1 主要是跟表的性質有關,一般使用count(*)來做統計

特點:

	1.分組查詢中的篩選條件分為兩類

	                   資料來源         位置                 關鍵字                                     

	分組前篩選         原始表		group by 子句的前面         where						

	分組後篩選 		分組後的結果集	 group by 子句的後面		  having

		①分組函式做條件肯定是放在having子句中

	    ②能用分組前篩選的,就有限考慮分組前篩選

	2.group by 子句支援單個欄位分組,多個欄位分組

	3.也可以新增排序(放在最後)

分組查詢

語法:
	select 分組函式,列 (要求出現在group by的後面)
	from 表
	【where 篩選條件】
	group by 分組列表
	【having 分組後的篩選】
	【order by 子句】
注意:
	查詢列表必須特殊,要求是分組函式和group by後出現的欄位

連線查詢

含義:又稱多表查詢,當查詢的欄位來至多個表時,就會用到連線查詢。

笛卡爾乘積現象:表1 有m行,表2有n行,結果=m*n行

發生原因:沒有有效的連線條件

如何避免:新增有效的連線條件


sql92語法

內連線

			1.等值
			select 查詢列表
			from 表1 別名,表2 別名
			where 表1.key=表2.key
			【and 篩選條件】
			【group by 分組欄位】
			【having 分組後的篩選】
			【order by 排序欄位】
			特點:
				①一般為表起別名
				②多表的順序可以調換
				③n表連線至少需要n-1個連線條件
				④等值連線的結果是多表的交集部分

			2.非等值
			select 查詢列表
			from 表1 別名,表2 別名
			where 非等值連線條件
			【and 篩選條件】
			【group by 分組欄位】
			【having 分組後的篩選】
			【order by 排序欄位】

			3.自連線
			select 查詢列表
			from 表 別名1,表 別名2
			where 等值連線條件
			【and 篩選條件】
			【group by 分組欄位】
			【having 分組後的篩選】
			【order by 排序欄位】
外連線
			4.左外
			
			5.右外

			6.全外

交叉連線

sql99語法

語法:
		select 查詢列表
		from 表1 別名 【連線型別】
		join 表2 別名 on 連線條件
		【where 篩選條件】
		【group by 分組】
		【having 篩選條件】
		【order by 排序列表】
分類:
內連線:inner語法:

		select 查詢列表
		from 表1 別名
		inner join 表2 別名       表2也可以在括號內加上子查詢
		on 連線條件
		
		等值
			特點:
			①新增排序、分組、篩選
			②inner可以省略
			③篩選條件放在where後面,連線條件放在on後面,提高分離性,便於閱讀
			④ 和sql92語法一樣都是查詢表的交集結果
		非等值
		自連線
	
外連線:
應用場景:用於查詢一張表中有,另一個表沒有的記錄。
特點:
1、外連線的查詢結果為主表中的所有記錄
	如果從表中有和它匹配的,則顯示匹配的值
	如果從表中沒有和它匹配的,則顯示null
	外連線查詢結果=內連線結果+主表中有而從表沒有的記錄
2、左外連線,left join左邊的是主表
   右外連線,right join右邊的是主表
3、左外和右外交換連個表的順序,可以實現同樣的效果
4、全外連線=內連線的結果+表1中有但表2沒有的+表2中沒有但表1中沒有的
		左外 left【outer】
		右外 right【outer】
		全外 full【outer】
交叉連線:cross 
笛卡爾乘積

子查詢

含義:
出現在其他語句中的select語句,稱為子查詢或內查詢
外部的查詢語句,稱為主查詢或外查詢

分類:
按子查詢出現的位置

  • select後面
    • 僅僅支援標量子查詢
  • from後面
    • 表子查詢
  • where或having後面
    • 標量子查詢
    • 列子查詢==
    • 行子查詢
  • exists
    • 表子查詢

按結果集的行數列不同:

  • 標量子查詢(結果集只有一行一列)
  • 列子查詢(結果集只有一列多行)
  • 行子查詢(結果集有一行多列)
  • 表子查詢(結果集一般為多行多列)

一、where或having後面

標量子查詢(單行子查詢)

案例1:誰的工作比Abel高
①查詢Abel的工資
SELECT salary
FROM employees
WHERE last_name = 'Abel'

②查詢員工的資訊,滿足 salary>①結果
SELECT *
FROM employees
WHERE salary>(SELECT salary
							FROM employees
							WHERE last_name = 'Abel'
);

案例2:返回job_id與141員工相同,salary比143號員工多的員工 姓名,job_id 和工資
①查詢141好員工job_id
SELECT  job_id
FROM   empoyees
WHERE  employee_id = 141

② 查詢143號員工的salary
SELECT  salary
FROM   empoyees
WHERE  employee_id = 143

③查詢員工的姓名,job_id 和工資 要求job_id=①並且salary>② 

SELECT laste_name,job_id,salary
FROM employees
WHERE job_id = (SELECT  job_id
								FROM   empoyees
								WHERE  employee_id = 141
) AND salary>(SELECT  salary
							FROM   empoyees
							WHERE  employee_id = 143

);

案例3:返回工資工資最少的員工的last_name,job_id和salary
①查詢公司的最低工資
SELECT MIN(salary)
FROM employees

②查詢last_name,job_id和salary 要求salary=①
SELECT last_name,job_id,salary
FROM employees
WHERE salary=(
							SELECT MIN(salary)
							FROM employees
);

案例4:查詢最低工資大於50號部門最低工資的部門id和其最低工資
①查詢50號部門的最低工資
SELECT MIN(salary)
FROM employees
WHERE department_id = 50

②查詢每個部門的最低工資
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id

③    在二的基礎上篩選②,滿足min(salary)>①
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
											SELECT MIN(salary)
											FROM employees
											WHERE department_id = 50
);

④子查詢的執行優先於主查詢執行,著查詢的條件用到子查詢的結果
列子查詢尋,一般搭配著多行操作符使用

2. 列子查詢(多行子查詢)

**多行操作符:**
"IN:在範圍內的值,只要有就true
ALL: 與子查詢返回的所有值比較為true 則返回true
ANY/SOME:與子查詢返回的任何值比較為true 則返回true"

案例1:返回location_id是1400或1700部門中的所有員工姓名
①查詢location_id是1400或1700的部門編號
SELECT department_id                          DISTINCT去重
FROM departments
WHERE location_id IN(1400,1700)

②查詢員工姓名,要求部門號是①列表中的某一個
SELECT last_name
FROM employess
WHERE department_id(
										SELECT department_id                     
										FROM departments
										WHERE location_id IN(1400,1700)
);
  1. 行字查詢(多列多行)
    特點:
    ①子查詢放在小括號內
    ②子查詢一般放在條件右側
    ③標量子查詢,一般搭配著當行操作符使用 "> < <= >= = <>"

分頁查詢

應用場景:當要顯示的資料,一頁顯示不全,需要分頁提交sql請求
語法:

		select 查詢列表            7
		from 表                   1
		【join type】 join 表2     2
		on 連線條件                3
		where 篩選條件             4
		group by 分組欄位          5
		having 分組後的篩選         6
		order by 排序的欄位        8
		limit offset,size         9
		
		offset要顯示條目的起始索引(從0開始)
		size要顯示的條目個數
			
			select * from employees limit 0,5;

DDL

資料庫定義語言,對庫和表的管理

  • 建立:create
    create database 庫名;
  • 修改:alter
  • 刪除:drop
    drop database 庫名;

建立表

create table 表名(
		列名 列的型別 【(長度) 約束】,
		列名 列的型別 【(長度) 約束】,
		列名 列的型別 【(長度) 約束】,
		列名 列的型別 【(長度) 約束】,
		...
		列名 列的型別 【(長度) 約束】
)

修改表名
修改列的型別或約束
新增心列
刪除列
修改表名

複習sql查詢語句

SELECT
			last_name,
			department_id,
			salary*12*(1+IFNULL(commission_pct,0)) AS 年薪,      
FROM
			employees;

  1. 一般白勺的後面就是要查詢的東西,白勺的前面是條件
  2. or或者等於取並集

DQL查詢語言

基礎查詢語法

select 查詢列表
from 表明;

特點:1.查詢列表可以說欄位、常量、表示式、函式,也可以多個
			2.查詢結果是一張虛擬表
			3.字元型和日期型的常量值必須用單引號引起來,數值型不需要
			4.簡單的數學運算  > < <= >= = <> 
distinct

select 函式名(實參列表);

			+
			select 數值+數值  直接運算
			select 字元+數值  先試圖轉換字元為數值,成功的話就運算,否則轉換成0
			select null+值    都為null

concat函式:拼接函式
select concat(字元1,字元2,) 多個欄位顯示為一行

ifnull函式:判斷某欄位或表示式是否為null,如果為null返回指定的值,否則返回原本的值
select ifnull(commission_pct,0) from employees;

isnull函式 為null返回1=是,不為null返回0=否

條件查詢

select 查詢列表              3
from 表明                    1
where 篩選條件               2

篩選條件分類
1、簡單條件運算子
> < = <> != <=> >= <=

2、邏輯運算子
&& and
|| or
!  not

3、模糊查詢
like:一般搭配萬用字元使用,可以判斷字元型和數值型
select * from employees where department_id like '1__';
萬用字元: % 任意多個 _任意單個
between and
in
is null /is not null

排序查詢

語法:
			select 查詢列表                               3
			from 表                                      1
			【where 篩選條件】                            2
			order by 排序列表 【asc|desc】預設升序         4

特點:1. order by 後面支援表示式、單個欄位、別名、函式、多個欄位排序。
		  2. 多個欄位排序的關係:先排第一個欄位、然後再排
			3. order by 一般都放在查詢語句的後面,limit字句除外

select last_name,salary
from employees
where salary not between 8000 and 17000  |    NOT(salary between 8000 and 17000)
order by salry DESC;
			

常見函式

函式:類似於java的方法,將一組邏輯語句封裝在方法中,對外暴露方法名
			1. 隱藏了實現細節 2. 提升程式碼重要性

呼叫:select 函式名(實參列表) 【from 表】;

特點:叫什麼,實現什麼效果。

分類:
				1. 當行函式
				如 concat、length、ifnull等
				2. 分組函式,又稱為統計函式、聚合函式。
				做統計使用