基础数据库知识
功能:從表中(數據庫中數據是存儲在二維表格當中的)查詢獲取自己想要的數據,對應到生活中的軟件功能:
百度搜索、淘寶搜索、12306 查詢......
SELECT 語句
例如:用戶信息表,表的名字: user_tab
列: 用戶編號 user_id
???? 用戶的姓名 user_name
???? 密碼 passwd
???? 手機號 phone
???? 郵箱? email
???? 創建日期 create_date
??? ?
模擬場景:
1、從 user_tab 表中把所有用戶信息找出來(查詢)
SELECT? * FROM user_tab;
2、查詢表中部分列信息:查詢用戶的用戶名和手機號,郵箱;
SELECT user_name,phone,email FROM user_tab;
SELECT user_name 用戶名,phone 手機號,email 郵箱 FROM user_tab;
3、查詢名字叫做"司馬懿"的用戶信息
SELECT * FROM user_tab WHERE user_name='司馬懿'
4、查詢名字叫'司馬懿'和'張春華'的用戶信息;
SELECT * FROM user_tab WHERE user_name='司馬懿' OR user_name='張春華'
SELECT * FROM user_tab WHERE user_name IN('司馬懿','張春華','曹丕');
5、查詢名字 叫司馬懿,并且手機號碼 13324678899 的用戶
SELECT * FROM user_tab WHERE user_name='司馬懿' AND phone=13324678899
==》語法
1、查詢表中所有的數據信息:?? 表名
SELECT * FROM 表名;
2、查詢表中部分列信息: 表名? 列名
SELECT 列名1,列名2,列名3,..... FROM 表名;
3、給列起別名: 列名1 別名,列名2 別名2, 列名3 別名3 (別名不要重復)
SELECT user_name 用戶名,phone 手機號,email 郵箱 FROM user_tab;
4、去重,(重復顯示的數據,只顯示一行,多余的不顯示去掉),重復是指完全一模一樣
關鍵字:? DISTINCT ?
SELECT DISTINCT job,deptno FROM emp;
5、帶條件的查詢語句:根據查詢條件來查詢獲取數據(實際工作中用的最多的)
關鍵字: WHERE
查詢條件: 列名? 運算符? 搜索值 ?
備注:搜索值除過數字以外,其它類型必須加單引號括起來,或者是雙引號括起來。
SELECT *? FROM 表名 WHERE 查詢條件
一、單條件查詢語句:一個查詢條件
SELECT * FROM 表名 WHERE 查詢條件
單條件查詢的運算符: = , !=,<>,>,<,>=,<=
= 精確查詢:將跟搜索值一模一樣的數據查詢出來,實際應用非常廣(銀行的身份證號碼查詢個人信息)
備注:搜索值區分大小寫,區分中英文,搜索值數字可以不加引號,其它類型必須加引號括起來。
SELECT * FROM emp WHERE ename='scott';? -- Oracle 中必須和表中一樣,都是大寫
!= 不等于,將跟查詢條件不一樣的數據全部查詢出來;
SELECT * FROM emp WHERE ename!='scott';
二、多條件查詢:多個查詢條件
條件連接: AND? OR
查詢條件 AND 查詢條件 :功能,將同時滿足兩個條件的數據查詢出來
查詢條件 OR 查詢條件 : 功能,只要滿足其中一個查詢條件就把數據找出來
例如:
SELECT ename FROM emp WHERE sal>2000 AND deptno=10;
SELECT * FROM user_tab WHERE user_name='司馬懿' OR user_name='張春華'
多條件運算符:? IN??? BETWEEN ... AND ...??? NOT
IN 多值運算符
用法: IN(搜索值1,搜索值2,搜索值3,...)? 功能:將滿足這幾個搜索值的數據全部查詢出來
等價于:列名=搜索值1 OR 列名=搜索值2 OR 列名=搜索值3 OR ...? 列名必須是一樣的
SELECT * FROM user_tab WHERE user_name IN('司馬懿','張春華','曹丕');
SELECT * FROM user_tab WHERE user_name='司馬懿' OR user_name='張春華' OR user_name='曹丕';
例如:查詢員工薪水高于2000,并且在部門10或者部門20當中員工信息;
SELECT * FROM emp WHERE sal>2000 AND deptno IN(10,20);
SELECT * FROM emp WHERE sal > 2000 AND (deptno =20 OR deptno=10);? -- and 優先級高于 or
BETWEEN ... AND ... 查詢一個區間范圍 內數據,用于數值了類型居多;
例如:查詢薪水在 2000~3000之間的員工信息
SELECT * FROM emp WHERE sal >= 2000 AND sal<=3000;
SELECT * FROM emp WHERE sal BETWEEN 2000 AND 3000;? -- 包含了臨界值
用法: 列名 BETWEEN 值1 AND 值2?? 等價于? 列名 >= 值1 AND 列名<=值2
注意: 值1<值2,包含了臨界值(上下限)
NOT(1個或者多個查詢條件)
用法: NOT 取反,功能(是括號中查詢條件取反的數據)
例如:
SELECT * FROM emp WHERE NOT(sal BETWEEN 2000 AND 3000);
SELECT * FROM emp WHERE NOT(ename='SCOTT');
6、模糊查詢:將跟搜索值類似的數據全部查詢出來;
關鍵字(運算符): LIKE , 不能夠單獨使用,必須要結合通配符?? %? 或者 _? 一起使用
% 代表的是0個或者任意多個字符
?? 張% : 張,張三,張三豐,張三豐******,即指以張開頭的信息數據全部查詢出來
?? %張 :代表以張結尾的數據
?? %張% : 包含張的信息
_ 代表的是任意一位字符 :僅代表一個字符,占位符
例如:查詢名字中包含"司馬"的用戶信息
SELECT * FROM user_tab WHERE user_name LIKE? '%司%馬%';
查詢名字中包含"司馬",并且手機號倒數第二位是 6 的用戶信息
SELECT * FROM user_tab WHERE user_name LIKE? '%司%馬%' AND phone LIKE '%6_';
SELECT * FROM user_tab WHERE user_name LIKE? '%司%馬%' AND phone LIKE '_________6_';? -- 容易數錯
例如:查詢名字 ALLEN BLAKE CLARK MLIER 這幾個,用模糊查詢實現;
SELECT * FROM emp WHERE ename LIKE '%L%';
7、 查詢結果排序
關鍵字: ORDER BY? 列名? 排序方式(可以自定義,默認升序):
升序: ASC
降序: DESC
==》語法:
SELECT * FROM 表名 [WHERE 查詢條件] ORDER BY 列名1,列名2 DESC,....;
SELECT * FROM emp WHERE ename LIKE '%L%' ORDER BY deptno;
例如: 查詢部門編號為10,20的員工信息,然后按照部門編號升序排序,同一個部門再按照薪水降序排序。
SELECT * FROM emp WHERE deptno IN(10,20) ORDER BY deptno ASC,sal DESC;
總結
- 上一篇: 图灵C/C++图书阅读路线图
- 下一篇: 龙龟的文具盒诞生啦