简单查询(DQL)
簡單查詢(DQL)
1. 查詢一個字段?
? select 字段名 form 表名;
? 其中要注意:
? select 和 form 都是關鍵字
? 字段名和表名都是標識符
強調:
所有SQL語句都是“;”結尾
2.查詢兩個字段,或者多個字段怎么辦?
? 使用“,”號隔開
? select 字段名,字段名 form 表名;
3.查詢所有字段怎么辦?
方法一:(開發用)
? 把每個字段都寫上
方法二:
? 用*
? select * form 表名;
這種方法的缺點:
效率低
可讀性差
在實際開發中不建議,可以自己玩沒問題
你可以在DOS命令窗口想要快速的看一看全表數據可以采用這一種方式
4. 給查詢的列起別名?
使用as關鍵字
例如: mysql>select deptno,dname as deptname from dept;
注意:只是將顯示的查詢結果列名顯示為deptname,原來表的列名還是:dname
記住:select語句只是查詢,而不會進行修改操作
as可以省略
例如: mysql>select deptno,dname deptname from dept;
假設起別名的時候,別名里面有空格,怎么辦
例如: mysql>select deptno,dname dept name from dept;
? DBMS看到這樣的語句,進行SQL語句的編譯,不合語法,編譯報錯。
解決方法
別名里面有空格的時候加上’’
例如:例如: mysql>select dname ‘dept name’ from dept;
注意:在所有的數據庫當中,字符串統一使用單引號括起來,
單引號是標準的,雙引號在oracle數據庫中用不了。但是在mysql中可以使用
5. 計算年新
例如:mysql>select ename,sal*12 from emp;//結論:字段可以使用數學表達式!
起別名:mysql>select ename,sal*12 as yearsal from emp;
起別名中文:mysql>select ename,sal*12 as ‘年新’ from emp;
條件查詢
1.什么是條件查詢?
不是將表中所有數據都查出來,是查詢出來符合條件的。
語法格式:
? select
? 字段1,字段2,字段3…
? from
? 表名
? where
? 條件:
2.都有哪些條件?
=等于
查詢工資等于800的員工姓名和編號?
? select empno,ename form emp where sal =800;
<>或!=不等于
查詢工資不等于800的員工姓名和編號?
? select empno,ename form emp where sal !=800;
? select empno,ename form emp where sal <>800;
<小于
查詢工資小于2000的員工姓名和編號?
? select empno.ename from emp where sal < 2000;
<=小于等于
查詢工資小于等于2000的員工姓名和編號?
? select empno.ename from emp where sal <= 2000;
>大于
? 查詢工資大于2000的員工姓名和編號?
? select empno.ename from emp where sal > 2000;
>=大于等于
? 查詢工資大于等于2000的員工姓名和編號?
? select empno.ename from emp where sal >= 2000;
between…and…兩個值之間,等同于>=and<=
? 查詢工資在2450和3000之間的員工信息?包括2450和3000
? 第一種方式:>=and<=(and是并且的意思)
? select emono,ename,sal from emp were sal>= 2450 and sal<=3000;
? 第二種方式:between…and…
? select
? emp
? where
? sal between 2450 and 3000;
? 注意:使用between and的時候,必須遵守左小右大。
? between and 是閉區間,包括兩端的值。
is null為null(is not null 不為空)
? 查詢哪些員工的津貼/補助為null?
? select empno,ename,sql,comm from emp where comm is null;
? 注意:在數據庫當中null不能使用等號進行衡量。需要使用is null 因為
? 數據庫中的null代表什么也沒有,它不是一個值,所以不能使用等號衡量。
? 查詢哪些員工的津貼/補助不為null?
? select empno,ename,sql,comm from emp where comm is not null;
and 并且
or或者
? 查詢工作崗位是MANAGER和SALESMAN的員工
? select empno,ename,job from emp where job=‘MANAGER’;
? select empno,ename,job from emp where job=‘SALESMAN’;
? select
? empno,ename,job
? from
? emp
? where
? job=‘SALESMAN’ or job=‘MANAGER’;
?
? 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);
? //not in 表示不在這幾個值當中的數據
? select ename,sal from emp where sal not in (800,5000);
not 可以取非,主要用在is 或 in 中
? is null
? is not null
? in
? not in
like
? 稱為模糊查詢,支持%或下劃線匹配
? %匹配任意多個字符
? 下劃線:任意一個字符。
? (%是一個特殊的符合,_也是一個特殊符合)
? 找出名字中含有o的?
? select ename from emp where ename like ‘%o%’;
? 找出名字以T結尾的?
? select ename from emp where ename like ‘%T’;
? 找出名字以K開始的?
? select ename form emp where enam like ‘K%’;
? 找出第二個字每是A的?
? select ename from emp where ename like ‘_A%’;
? 找出第三個字母是R的?
? select ename from emp where ename like ‘__R%’;
? t_student學生表
? name字段
? =================
? zhangsan
? lisi
? wangwu
? zhaoliu
? jack_son
? 找出名字中有"_"的?
? select name from t_student where name like ‘%_%’;//這樣不行。
? select name from t_student where name like ‘%_%’;//\轉義字符。
總結
- 上一篇: 包机制。。
- 下一篇: Redis数据类型--字符串类型