DQL(Date Query Language):数据查询语言
(1)所有的查询操作都用它 Select
(2)简单的查询,复杂的查询它都能做~
(3)数据库中最核心的语言,最重要的语句
(4)使用频率最高的语句
Select完整的语法:
SELECT
[ALL | DISTINCT | DISTINCTROw]
[HIGH_PRIORITY]
[STRAIGHT_3OIN]
[sQL_SMALL_RESULT] [sQL_BIG_RESULT][sQL_BUFFER_RESULT]
[sQL_CACHE / sQL_No_CACHE] [sQL_CALC_FOUND_ROwS]
select_expr [, select_expr ...]
[FROM tab1e_references
[PARTITION partition_list][wHERE where_condition]
[GROUP BY {co7_name / expr l position}[Asc / DEsc],... [wITH ROLLUP]][HAVING where_condition]
[ORDER BY {co1_name / expr l position}[Asc / DESc],...]|
[LIMIT {[offset,] row_count / row_count OFFSET offset}][PROCEDURE procedure_name(argument_7ist)]
[INTO OUTFILE 'file_name '
[CHARACTER SET charset_name]
export_options INTO DUMPFILE 'file_name 'INTO var_name [ var_name]]
[FOR UPDATE / LOCK IN SHARE MODE]]
指定查询字段:
-- 查询全部的学生 SELECT 字段 FROM 表
SELECT *FROM student
-- 查询指定字段
SELECT `studentNo`,`StudentName` FROM student
-- 别名,给结果起一个名字 AS 可以给字段起别名也可以给表起别名
SELECT `StudentNo` AS 学号,`StudentName` AS 学生姓名 FROM student AS s
-- 函数 Concat(a,b)
SELECT CONCAT('姓名:',StudentName) AS 新名字 FROM student
语法:SELECT 字段....FROM 表
有的时候,列名字不是那么的见名知意。我们起别名 AS 字段名 as 别名 表名 as 别名
去重 :distinct
作用:去除SELECT查询出来的结果中重复的数据,重复的数据只显示一条
-- 查询一下有哪些同学参加了考试,成绩
SELECT * FROM result -- 查询全部的考试成绩
SELECT `StudentNo` FROM result -- 查询有哪些同学参加了考试
SELECT DISTINCT `StudentNo` FROM result -- 发现重复数据,去重
数据库的列(表达式)
SELECT VERSION() -- 查看系统的版本(函数)
SELECT 100*3-1 AS 计算结果 -- 用来计算 (表达式)
SELECT @@auto_increment_increnment -- 查询自增的步长(变量)
-- 学员成绩考试 + 1分查看
SELECT `StudentNo`,`StudentResult` +1 AS '提分后' FROM result
数据库中的表达式:文本,列,Null,函数,计算表达式,系统变量......
select 表达式 from 表
where条件子句
作用:检索数据中 符合条件 的值
搜索的条件由一个或多个表达式组成!结果都是布尔值
逻辑运算符
运算符 | 语法 | 描述 |
and && | a and b a&&b | 逻辑与,两个都为真,结果为真 |
or || | a or b a | | b | 逻辑或,其中一个为真,则结果为真 |
Not ! | not a ! a | 逻辑非,真为假,假为真! |
尽量使用英文字母
-- ========================== where ========================
SELECT studentNo,`StudentResult` FROM reslt
-- 查询考试成绩在 95~100分之间
SELECT studentNo,`StudentResult` FROM reslt
SELECT StudentResult>=95 AND StudentResult<=100
-- and &&
SELECT studentNo,`StudentResult` FROM reslt
SELECT StudentResult>=95 && StudentResult<=100
-- 模糊查询(区间)
SELECT studentNo,`StudentResult` FROM restul
WHERE StudentResult BETWEEN 95 AND 100
-- 除了1000号学生之外的同学的成绩
SELECT studentNo,`StudentResult` FROM result
WHERE studentNo!=1000;
-- != not
SELECT studentNo,`StudentResult` FROM result
WHERE NOT studentNo=1000;
模糊查询:比较运算符
运算符 | 语法 | 描述 |
IS NULL | a is null | 如果操作符为NUll,结果为真 |
IS NOT NULL | a is not null | 如果操作符不为null,结果为真 |
BETWEEN | a between b and c | 若a 在b 和c 之间,则结果为真 |
Like | a like b | SQL匹配,如果a匹配b,则结果为真 |
In | a in(a1,a2,a3....) | 假设a在a1,或者a2....其中的某一个值,结果为真 |
-- ================= 模糊查询 ===============
-- 查询姓刘的同学
-- like结合 %(代表0到任意个字符) _(一个字符)
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '刘%'
-- 查询姓刘的同学,名字后面只有一个字的
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '刘_'
-- 查询姓刘的同学,名字后面只有两个字的
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '刘__'
-- 查询名字中间有嘉字的同学 %嘉%
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '%嘉%'
-- ================ in(具体的一个或多个值) =================
-- 查询 1001,1002,1003号学员
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo IN (1001,1002,1003);
-- 查询在北京的学生
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `Address` IN ('安徽','河南洛阳');
-- ========= null not null==========
-- 查询地址为空的学生 null
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE address='' OR address IS NULL
-- 查询有出生日期的同学 不为空
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `BornDate` IS NOT NULL
-- 查询没有出生日期的同学 为空
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `BornDate` IS NULL