一、SQL的認識
(一)、SQL解釋:
sql(structure query language)結構化查詢語言
(二)、sql 的三種註釋
1. # 註釋的文字
2. -- 註釋的文字
3. /* 註釋的文字 */
(三)、sql的常見操作
1.改變活動的數據 庫。 use 數據庫名(表示切換到當前使用數據庫)
2.sql不區分大小寫,一般來講 表名、列名 、庫名小寫 ,關鍵字大寫
3.每一條sql語句結尾 用分號
(四)、sql的常見數據類型
/*
數值型:整數和小數
整數:int
小數:float、double
字符型:
varchar(長度) 可變長度的字符串(耗用空間小,效率低)
char(長度) 固定長度的字符串(耗用空間大,效率高)
text 較長的文本
日期型:
datetime
*/
二、SQL之DML語言之 SELECT (最基礎的簡單查詢)
(一)、查詢SELECT
基本查詢
1、查詢全部行和列
【語法】: select * from 表名
2、查詢部分列
【語法】: select 列名,列名 from 表名
3、使用條件運算符或邏輯運算符實現條件查詢
【語法】: select 列名,列名 from 表名 where 條件
4、最基本的查詢
/*
關係運算符:> < >= <= = <>(!=)
邏輯運算符: and or not
*/
【案例】:
//查詢表中字段department_id在(80~100)之間的員工詳細信息
select * from 表名 where department_id>80 and department_id<100
//查詢表中字段job_id=‘IT’ 或 字段 salary爲1200的記錄詳細信息
select * from 表名 where job_id<>'IT' or salary=12000
<5> 起別名
SELECT employee_id 員工編號,first_name 名稱,
last_name 姓 FROM Employees;
SELECT employee_id AS '員工編號',first_name AS '名
稱',last_name AS '姓' FROM Employees;
6、 查詢部分行(條件查詢)
6-1 使用條件運算符(關係運算符)
工資大於10000
SELECT * FROM employees WHERE salary>10000;
工資大於10000並且小於15000
SELECT * FROM employees WHERE salary<10000;
工資等於12000
SELECT * FROM employees WHERE salary=12000;
工資不等於12000
SELECT * FROM employees WHERE salary!=12000;
6-2 使用邏輯運算符
工資大於10000並且小於15000
SELECT * FROM employees WHERE salary<10000 AND salary>=8000;
編號大於200或者小於110
SELECT * FROM employees WHERE employee_id<110 OR employee_id>200;
工資大於10000並且小於15000
SELECT * FROM employees WHERE NOT(salary<10000 AND salary>=8000);
三、MySql 的幾個基本函數使用
(一)、mysql中的函數
/*
單行函數: 提供一個值,返回 一個結果
日期函數:now 獲取當前日期
字符函數:對字符型進行處理
數學函數:對數值型進行處理
分組函數:(聚合函數) 提供一組值,返回 一個統計結果
*/
1、單行函數
<1>. 日期函數
SELECT NOW(); 獲取當前時間
<2>.字符函數
大寫
SELECT UPPER('AbCd'); //全轉大寫
//查詢字段last_name 起別名爲:大寫名字
SELECT UPPER(last_name) 大寫的姓名 FROM employees;
小寫
SELECT LOWER('AbCd');
//查詢字段last_name 起別名爲:小寫名字
SELECT LOWER(last_name) 小寫的姓名 FROM employees;
<3>.字符串連接
使用CONCAT()
SELECT CONCAT(first_name,’ ‘,last_name) FROM employees;
例子:
//將大寫的姓名連接起來並輸出
SELECT UPPER(CONCAT(first_name,' ',last_name)) FROM employees;
//將大寫的姓 小寫的名連接起來並輸出
SELECT CONCAT(UPPER(first_name),' ',LOWER(last_name)) FROM employees;
<4>.截取字符串
/*
SELECT SUBSTR('HelloWorld',1,2) //結果He
sql索引從1開始
參數1:完整的字符串
參數2:起始索引
參數3:截取的長度
*/
<5>獲取字節長度
SELECT LENGTH('Hello中') //UTF-8編碼 結果爲8 GBK編碼爲7
SELECT LENGTH('中') //UTF-8編碼 結果爲3 GBK編碼可以爲2
<6>獲取指定字符的索引,如果沒有返回0(因爲索引從1開始 不存在可以取0)
SELECT INSTR('HelloWorld', 'q')
<7>顯示指定位數,不夠的用指定符號填充
lpad 在左邊填充,rpad 在右邊填充
例如:
SELECT LPAD(salary,10,'*') FROM employees;
SELECT RPAD(salary, 10, '%') FROM employees;
<8>去前後 指定的字符,中間的去不掉
SELECT TRIM(' ' FROM ' hello world ') space
SELECT LENGTH(TRIM(' ' FROM ' hello world ')) space
<9> 替換指定的字符
//將l替換爲x
SELECT REPLACE('abcdlll','l','x')
2、 數學函數
<1>truncate 截斷,保留指定位數,多餘的直接截斷,沒有四捨五入
SELECT TRUNCATE(13.567,2);// 結果13.56
SELECT TRUNCATE(13.567,0);// 結果13
SELECT TRUNCATE(13.567,-1);// 結果10
<2>round 四捨五入
SELECT ROUND(1234.53,1);//1234.5
<3>mod 取餘 相當於java中 的% 等價於: 被除數-被除數/除數*除數
SELECT MOD(-15,7);//結果-1
2、分組函數
/*
max求最大值 (支持 數值、字符、日期類型)
min求最小值支持 (數值、字符、日期類型)
sum 求和 (支持數值型)
avg 求平均值 (支持數值型)
count 計算非null的個數
count(*) 表中的行數
*/
例如:
SELECT MAX(salary) 最高工資,MIN(salary) 最低工資,SUM(salary) 和,AVG(salary) 平均,
COUNT(salary) 個數
FROM employees;
各方法測試如下:
SELECT * FROM employees;
SELECT MAX(*) FROM employees;
SELECT MIN(first_name) FROM employees;
SELECT SUM(first_name) FROM employees;
SELECT AVG(first_name) FROM employees;
COUNT使用例如:
該列非空的值的個數
SELECT COUNT(first_name) FROM employees;
SELECT COUNT(commission_pct) FROM employees;
顯示錶中的行數
SELECT COUNT(*) FROM employees;
(二)、條件表達式
語法:
case 判斷的字段
when 值 then 結果
when 值 then 結果
...
else 結果
end
案例:
查詢部門號爲 10, 20, 30 的員工信息, 若部門號爲 10,
則打印其工資的 1.1 倍, 20 號部門, 則打印其工資的 1.2 倍,
30 號部門打印其工資的 1.3 倍數
//用普通的switch case 實現:
switch(department_id){
case 10:syso(salary*1.1);break;
case 20:syso(salary*1.2);break;
case 30:syso(salary*1.3);break;
default:syso(salary);break;
//使用MySql條件表達式實現
SELECT department_id,salary 原始工資,
CASE department_id
WHEN 10 THEN salary*1.1
WHEN 20 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END 新工資
FROM employees
WHERE department_id IN(10,20,50,90,100);
//判斷查詢 if()成立則bad 否則 是 good
SELECT employee_id,commission_pct,
IF(commission_pct IS NULL,'bad','good')
FROM employees;