SQL查询基础
1、单表查询
从数据库中查找数据 专业的称谓又称为投影
基本查询语句结构
select 列 from 表
* 所有列不是所有其他东西
查询所有数据
例:SELECT * FROM t_studen
需要执行比较细的操作 加上条件筛选:查询id为2号的学生信息
SELECT * FROM t_student WHERE id=2;
筛选的执行步骤
例:SELECT * FROM t_student WHERE id=2;
SELECT * (3) 再查询 筛选完后 我最终投影的结果就是筛选后的结果,不是每行都显示出来,显示行的数据是筛选后的数据 所以最后执行 select
FROM t_student (1) 把整张表加到内存里面 把整张表找到后加到内存里面
WHERE id =2 (2) 筛选 因为一张表里面的数据需要去做一个筛选,不想让每行都显示,这样就没意义了,所以要进行一个条件筛选
只投影某些列
SELECT id,s_name FROM t_student; 只投影结果,而不是改变表数据,很多人会迷惑,其他列会不会不见了
查询出来显示成中文,比如s_name显示成学生姓名
AS 加上别名 (列的别名)
SELECT id,s_name AS "学生姓名" FROM t_student;
表别名,当有几张表的时候,表的名字很长,会给表加上别名
SELECT t_student.s_name FROM t_student -- 但是在一张表中这样写t_student.s_name 没有任何意义
SELECT a.s_name FROM t_student a 本次查询 a就代表t_student 就可以a.s_name
1.1、筛选掉重复数据 DISTINCT
SELECT DISTINCT s_name FROM t_student;
SELECT DISTINCT s_name,s_classid FROM t_student; distinct 要重复列(s_name,s_classid)的数据完全一样
1.2、选择操作:写筛选条件的方法:
并且 and 也可以写成&&
SELECT * FROM t_student WHERE id=2 AND s_name='李四' AND s_classid='二班'
SELECT * FROM t_student WHERE id=2 AND s_name='李四' && s_classid='二班'
或者 or 也可以写成 ||
SELECT * FROM t_student WHERE s_classid='二班' OR id=1
SELECT * FROM t_student WHERE s_classid='二班' || id=1
范围操作BETWEEN……AND……(包含)
语法:select 列 from 表名 where 列名 between 值 and 值;
SELECT * FROM t_student WHERE age>=18 AND age<=25
SELECT * FROM t_student WHERE age BETWEEN 18 AND 25 -- 等同于上面大于等于 及小于等于
小于等于18和一班,大于等于25和一班
SELECT * FROM t_student WHERE age<=18 OR age>=25 AND s_classid='一班';
这条语句执行出来的结果是小于等于18的所有数据和大于等于25并且是一班的数据
是因为and的优先级高于or的优先级
所以应该这样写:
SELECT * FROM t_student WHERE (age<=18 OR age>=25 ) AND s_classid='一班';
小于等于18和一班,大于等于25和一班 and优先级高于or 所以一般是单独用括号括起来
查询学生年纪为18 或者25 或者28
SELECT * FROM t_student WHERE age=18 OR age=25 OR age=28
in 操作
简化上面的那种情况 where 列 in(值1,值2,值3)
SELECT * FROM t_student WHERE age IN(18,25,30)
not in 操作
值不是25的
SELECT * FROM t_student WHERE age NOT IN(25)
返回限定行数 limit
limit 数字=从第一行数据开始 数两行
limit 数字n,数字m 从第n行数据开始(跟数组下标计算方式一样) 数m行 跟字符串substr类似
SELECT * FROM t_student LIMIT 2
SELECT * FROM t_student LIMIT 2,2
返回第二行之后所有行 第二个参数足够大 超出也只会返回到最后一行为止
SELECT * FROM t_student LIMIT 2,100
返回多少行 应用场景? 一些网站数据较多时,要出现分页
1.3、模糊查询
% 不限制字符
语法:select * from 表名 where 字段 like ‘x%’;
找所有姓张的学生
SELECT * FROM t_student WHERE s_name='张三' = 全匹配 不会帮你自动模糊查询
SELECT * FROM t_student WHERE s_name LIKE '张%' like % 不限制字符(0-N个字符)的模糊查询
SELECT * FROM t_student WHERE s_name LIKE '%张%' like % 可以查到包含张 如 *张*
SELECT * FROM t_student WHERE s_name LIKE '%张 like % 可以查到张,以张结尾, 但是不能是张**
占位符 _(下划线) 一个下划线代表一个字符
找所有姓张的学生,并且名字长度为三个字
SELECT * FROM t_student WHERE s_name LIKE '张__' like _ 限制字符数的模糊查询 一个下划线代表一个字符
查询年纪为空的学生信息
SELECT * FROM t_student WHERE age