Mysql還有什麼需要必知必會

表結構

DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
USE test1;
##部門表
#DROP IF EXISTS TABLE DEPT;
CREATE TABLE DEPT(
DEPTNO int PRIMARY KEY,##部門編號
DNAME VARCHAR(14) , ##部門名稱
LOC VARCHAR(13) ##部門地址
) ;
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
##員工表
#DROP IF EXISTS TABLE EMP;
CREATE TABLE EMP(
EMPNO int PRIMARY KEY, #員工編號
ENAME VARCHAR(10), #員工姓名
JOB VARCHAR(9), #員工工作
MGR int, #員工直屬領導編號
HIREDATE DATE, #入職時間
SAL double, #工資
COMM double, #獎金
DEPTNO int #對應dept表的外鍵
);
## 添加 部門 和 員工 之間的主外鍵關係
ALTER TABLE EMP ADD CONSTRAINT FOREIGN KEY EMP(DEPTNO) REFERENCES DEPT (DEPTNO);
INSERT INTO EMP VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20);
INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20);
INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);
#工資等級表
#DROP IF EXISTS TABLE SALGRADE;
CREATE TABLE SALGRADE(
GRADE int, #等級
LOSAL double, #最低工資
HISAL double ); #最高工資
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

檢索數據

-- 最好是關鍵字大寫,其他的小寫 
-- 不區分大小寫
-- 空格會被忽略
-- 檢索單個列
SELECT ename FROM emp
-- 檢索多個列
SELECT empno,ename FROM emp
-- 檢索所有列 最好不使用通配符*,會降低檢索和應用程序的性能
SELECT * FROM emp
-- 檢索不同的行 DISTINCT 去重
SELECT DISTINCT job,ename FROM emp
-- 限制結果 LIMIT 5,5 第一個位置爲開始位置,第二個數爲要檢索的行數
SELECT empno,ename FROM emp LIMIT 1,2
-- 使用完全限定的表名
SELECT emp.ename FROM test.emp

排序檢索數據

-- 排序數據 order by
SELECT empno FROM emp order by empno
-- 按多個列排序 主要以第一個參數排序,第二個參數次之
SELECT * FROM emp order by empno,ename
-- 指定排序方向 desc降序ASC升序
SELECT empno FROM emp order by empno desc
-- 某列的最大值
SELECT empno FROM emp order by empno desc LIMIT 1

過濾數據

-- 使用where子句 where字句應該位於group by 子句之前
SELECT ename FROM emp where empno = '7654'
-- where子句操作符
-- 檢查單個值
SELECT ename FROM emp where empno = '7654'
SELECT ename FROM emp where empno <7654
-- 不匹配檢查
SELECT ename FROM emp where empno <>7654
-- 範圍值檢查
SELECT ename FROM emp where empno between 7654 and 7700
-- 空值檢查
SELECT ename FROM emp where mgr is NULL

數據過濾

-- and 操作符
SELECT ename FROM emp where empno < '7654'AND job ='SALESMAN'
-- or 操作符
SELECT ename FROM emp where empno < '7654'OR
job ='SALESMAN'
-- 計算次序
SELECT ename FROM emp where empno < '7654'AND(job ='SALESMAN' OR job ='CLERK')
-- IN 操作符
SELECT ename FROM emp where empno in('7654','7934')
SELECT ename FROM emp where empno in(SELECT empno FROM emp)
-- NOT與IN相反
SELECT ename FROM emp where empno NOT IN('7654','7934')

用通配符進行過濾

-- LIKE操作符 
-- 百分號(%)通配符 任何字符出現任意次數
-- 不區分大小寫
SELECT ename FROM emp where ename LIKE '%S%'
SELECT ename FROM emp where ename LIKE '%s%'

SELECT ename FROM emp where ename LIKE 'S%'
SELECT ename FROM emp where ename LIKE '%S'
-- 下劃線(_)匹配單個字符
SELECT ename FROM emp where ename LIKE '_ONES'
-- 注意:
-- 1、通配符比其他的搜索所花的時間更長
-- 2、不要過度使用通配符。
-- 3、在確實需要使用通配符時,除非絕對有必要,否則不要把它們用
-- 4、在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起
-- 來是最慢的。
-- 5、仔細注意通配符的位置。

用正則表達式進行搜索

-- 基本字符匹配
SELECT ename FROM emp where ename REGEXP 'S'
-- .匹配任意單個字符
SELECT ename FROM emp where ename REGEXP 'S...'
-- 進行or匹配
SELECT ename FROM emp where ename REGEXP 'S...|N'
-- 匹配幾個字符之一
SELECT ename FROM emp where ename REGEXP '[NS]'
SELECT ename FROM emp where ename REGEXP '[^NS]S'
-- 匹配範圍
SELECT ename FROM emp where empno REGEXP '[7782-7934]'
-- 匹配特殊字符 \\轉義
SELECT ename FROM emp where ename REGEXP '\\.'
-- 匹配字符類
-- [:alnum:] 任意字母和數字(同[a-zA-Z0-9])
-- [:alpha:] 任意字符(同[a-zA-Z])
-- [:blank:] 空格和製表(同[\\t])
-- [:cntrl:] ASCII控制字符(ASCII 0到31和127)
-- [:digit:] 任意數字(同[0-9])
-- [:graph:] 與[:print:]相同,但不包括空格
-- [:lower:] 任意小寫字母(同[a-z])
-- [:print:] 任意可打印字符
-- [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
-- [:space:] 包括空格在內的任意空白字符(同[\\f\\n\\r\\t\\v])
-- [:upper:] 任意大寫字母(同[A-Z])
-- [:xdigit:] 任意十六進制數字(同[a-fA-F0-9])

-- 匹配多個實例
SELECT * FROM salgrade WHERE salgrade.LOSAL REGEXP '[[:digit:]]{4}'
-- 定位符
SELECT * FROM salgrade WHERE salgrade.LOSAL REGEXP '^1'

創建計算字段

-- 拼接字段 CONCAT 鏈接串
SELECT CONCAT(ename,'(',empno,')') FROM emp where empno = '7654'
-- RTrim() 去除右邊空格
-- LTrim()(去掉串左邊的空格)
-- 使用別名
SELECT CONCAT(ename,'(',empno,')') AS empt FROM emp where empno = '7654'
-- 執行算術計算
SELECT ename,SAL-DEPTNO AS empsd FROM emp where empno = '7654'

使用數據處理函數

-- 文本處理函數 
-- Left() 返回串左邊的字符
-- Length() 返回串的長度
-- Locate() 找出串的一個子串
-- Lower() 將串轉換爲小寫
-- LTrim() 去掉串左邊的空格
-- Right() 返回串右邊的字符
-- RTrim() 去掉串右邊的空格
-- Soundex() 返回串的SOUNDEX值
-- SubString() 返回子串的字符
-- Upper() 將串轉換爲大寫
SELECT ename,Lower(ename)as Lower_ename from emp where empno = '7654'
-- AddDate() 增加一個日期(天、周等)
-- AddTime() 增加一個時間(時、分等)
-- CurDate() 返回當前日期
-- CurTime() 返回當前時間
-- Date() 返回日期時間的日期部分
-- DateDiff() 計算兩個日期之差
-- Date_Add() 高度靈活的日期運算函數
-- Date_Format() 返回一個格式化的日期或時間串
-- Day() 返回一個日期的天數部分
-- DayOfWeek() 對於一個日期,返回對應的星期幾
-- Hour() 返回一個時間的小時部分
-- Minute() 返回一個時間的分鐘部分
-- Month() 返回一個日期的月份部分
-- Now() 返回當前日期和時間
-- Second() 返回一個時間的秒部分
-- Time() 返回一個日期時間的時間部分
-- Year() 返回一個日期的年份部分
SELECT ename,Lower(ename)as Lower_ename from emp where Date(HIREDATE) between
'1981-09-28' and '1981-12-03'
--  數值處理函數
-- Abs() 返回一個數的絕對值
-- Cos() 返回一個角度的餘弦
-- Exp() 返回一個數的指數值
-- Mod() 返回除操作的餘數
-- Pi() 返回圓周率
-- Rand() 返回一個隨機數
-- Sin() 返回一個角度的正弦
-- Sqrt() 返回一個數的平方根
-- Tan() 返回一個角度的正切

待續…

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