SQL 入門 & MySql 簡單函數

一、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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章