簡單查詢
查詢一個欄位:
select 欄位名 from 表名;
其中要注意:
select和from都是關鍵字,
欄位名和表名都是識別符號,
強調:
對于SQL陳述句來說,是通用的,
所有的SQL陳述句以“;”結尾,
另外SQL陳述句不區分大小寫,都行,
實體:
a. 查詢部門名字
mysql>select dname from dept;

查詢兩個欄位,或者多個欄位使用逗號隔開“,”,
b. 查詢部門編號和部門名
select deptno,dname from dept;

c. 查詢所有欄位
第一種方式:可以把每個欄位都寫上
select a,b,c,d,e,f... from tablename;
第二種方式:可以使用*
select * from dept;

這種方式的缺點:
1、效率低
2、可讀性差,
在實際開發中不建議,可以自己玩沒問題,你可以在DOS命令視窗中想快速的看一看全表資料可以采用這種方式,
d. 給查詢的列起別名
mysql> select deptno,dname as deptname from dept;

使用as關鍵字起別名,
注意:只是將顯示的查詢結果列名顯示為deptname,原表列名還是叫:dname
像是查詢陳述句臨時復制了一個備份,然后對備份進行了修改,通過create可保存,這個備份
記住:select陳述句是永遠都不會進行修改操作的,(因為只負責查詢)
as關鍵字可以省略嗎?可以的
mysql> select deptno,dname deptname from dept;
起別名時,別名里有空格不符合語法,解決辦法:
select deptno,dname 'dept name' from dept; //加單引號
select deptno,dname "dept name" from dept; //加雙引號
· 注意:在所有的資料庫當中,字串統一使用單引號括起來,
單引號是標準,雙引號在oracle資料庫中用不了,但是在mysql中可以使用,
再次強調:資料庫中的字串都是采用單引號括起來,這是標準的,雙引號不標準,
e. 查詢時對欄位使用數學運算式
實體:
mysql> select ename,sal from emp;

mysql> select ename,sal*12 from emp;

同時使用別名和數學運算式

條件查詢
什么是條件查詢?
不是將表中所有資料都查出來,是查詢出來符合條件的,
語法格式:
select
欄位1,欄位2,欄位3....
from
表名
where
條件;
都有哪些條件?
運算子
= 等于
查詢薪資等于800的員工姓名和編號?
select empno,ename from emp where sal = 800;
查詢SMITH的編號和薪資?
select empno,sal from emp where ename = 'SMITH'; //字串使用單引號
<>或!= 不等于
查詢薪資不等于800的員工姓名和編號?
select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800; // 小于號和大于號組成的不等號
< 小于
查詢薪資小于2000的員工姓名和編號?
mysql> select empno,ename,sal from emp where sal < 2000;
<= 小于等于
查詢薪資小于等于3000的員工姓名和編號?
select empno,ename,sal from emp where sal <= 3000;
> 大于
查詢薪資大于3000的員工姓名和編號?
select empno,ename,sal from emp where sal > 3000;
>= 大于等于
查詢薪資大于等于3000的員工姓名和編號?
select empno,ename,sal from emp where sal >= 3000;
between ? and ?
兩個值之間, 等同于 >= and <=
查詢薪資在2450和3000之間的員工資訊?包括2450和3000
第一種方式:>= and <= (and是并且的意思,)
select empno,ename,sal
from emp
where sal >= 2450 and sal = 3000;
第二種方式:between ? and ?
select empno,ename,sal
from emp
where sal between 2450 and 3000;
注意:
用between and的時候,必須遵循左小右大,
between and是閉區間,包括兩端的值,
is null 為 null(is not null 不為空)
詢哪些員工的津貼/補助為null?
mysql> select empno,ename,sal,comm from emp where comm = null;
Empty set (0.00 sec)
mysql> select empno,ename,sal,comm from emp where comm is null;

注意:在資料庫當中null不能使用等號進行衡量,需要使用is null
因為資料庫中的null代表什么也沒有,它不是一個值,所以不能使用
等號衡量,
查詢哪些員工的津貼/補助不為null?
select empno,ename,sal,comm from emp where comm is not null;

and 并且
查詢作業崗位是MANAGER并且工資大于2500的員工資訊?
select
empno,ename,job,sal
from
emp
where
job = 'MANAGER' and sal > 2500;

or 或者
查詢作業崗位是MANAGER和SALESMAN的員工?
select
empno,ename,job
from
emp
where
job = 'MANAGER' or job = 'SALESMAN';

and和or同時出現的話,有優先級問題嗎?
查詢工資大于2500,并且部門編號為10或20部門的員工?
select
*
from
emp
where
sal > 2500 and deptno = 10 or deptno = 20;
分析以上陳述句的問題?
and優先級比or高;
以上陳述句會先執行and,然后執行or,
以上這個陳述句表示什么含義?
找出工資大于2500并且部門編號為10的員工,或者20部門所有員工找出來,
select
*
from
emp
where
sal > 2500 and (deptno = 10 or deptno = 20);
and和or同時出現,and優先級較高,如果想讓or先執行,需要加“小括號”以后在開發中,如果不確定優先級,就加小括號就行了,
in 包含,相當于多個 or (not in 不在這個范圍中)
查詢作業崗位是MANAGER和SALESMAN的員工?
select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
注意:in不是一個區間,in后面跟的是具體的值,
查詢薪資是800和5000的員工資訊?
select ename,sal from emp where sal = 800 or sal = 5000;
select ename,sal from emp where sal in(800, 5000); //這個不是表示800到5000都找出來,

not in 表示不在這幾個值當中的資料,
select ename,sal from emp where sal not in(800, 5000, 3000);

not 可以取非,主要用在 is 或 in 中
is null
is not null
in
not in
like
稱為模糊查詢,支持%或下劃線匹配
%匹配任意多個字符
下劃線:任意一個字符,
(%是一個特殊的符號,_ 也是一個特殊符號)
找出名字中含有O的?
mysql> select ename from emp where ename like '%O%';
找出名字以T結尾的?
select ename from emp where ename like '%T';
找出名字以K開始的?
select ename from emp where ename like 'K%';
找出第二個字每是A的?
select ename from emp where ename like '_A%';
找出第三個字母是R的?
select ename from emp where ename like '__R%';
排序
查詢所有員工薪資,排序?
select ename,sal from emp order by sal; // 默認是升序!!!

怎么降序?
指定降序:
select ename,sal from emp order by sal desc;

指定升序?
select ename,sal from emp order by sal asc;

可以兩個欄位排序嗎?或者說按照多個欄位排序?
查詢員工名字和薪資,要求按照薪資升序,如果薪資一樣的話,
再按照名字升序排列,
select ename,sal from emp order by sal asc, ename asc; // sal在前,起主導,只有sal相等的時候,才會考慮啟用ename排序,

根據欄位的位置也可以排序
select ename,sal from emp order by 2; // 2表示第二列,第二列是sal
按照查詢結果的第2列sal排序,
了解一下,不建議在開發中這樣寫,因為不健壯,
因為列的順序很容易發生改變,列順序修改之后,2就廢了,
綜合一點的案例:
找出工資在1250到3000之間的員工資訊,要求按照薪資降序排列,

關鍵字順序不能變:
select...
from...
where...
order by...
以上陳述句的執行順序必須掌握:
第一步:from
第二步:where
第三步:select
第四步:order by(排序總是在最后執行!)
資料處理函式
資料處理函式又被稱為單行處理函式
單行處理函式的特點:一個輸入對應一個輸出,
和單行處理函式相對的是:多行處理函式,(多行處理函式特點:多個輸入,對應1個輸出!)
單行處理函式常見的有哪些?
lower 轉換小寫
mysql> select lower(ename) as ename from emp;

upper 轉換大寫
mysql> select upper(name) as name from t_student;
substr 取子串(substr( 被截取的字串, 起始下標,截取的長度))
select substr(ename, 1, 1) as ename from emp;
注意:起始下標從1開始,沒有0.
找出員工名字第一個字母是A的員工資訊?
第一種方式:模糊查詢
select ename from emp where ename like 'A%';
第二種方式:substr函式
select
ename
from
emp
where
substr(ename,1,1) = 'A';
首字母大寫?
select name from t_student;
select upper(substr(name,1,1)) from t_student;
select substr(name,2,length(name) - 1) from t_student;
select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
concat函式進行字串的拼接
select concat(empno,ename) from emp;
length 取長度
select length(ename) enamelength from emp;
trim 去空格
mysql> select * from emp where ename = ' KING';
Empty set (0.00 sec)
mysql> select * from emp where ename = trim(' KING');
str_to_date 將字串轉換成日期
date_format 格式化日期
format 設定千分位
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/274021.html
標籤:其他
上一篇:MySQL存盤程序了解一下
