SQL高级语句
DISTINCT
不显示重复的内容
语法:SELECT DISTINCT “字段” FROM “表名”;
select distinct name from lk1;
SELECT
显示表格中一个或数个栏位的所有资料
语法:SELECT “字段” FROM “表名”;
select * from lk1; #查看表格详细信息
select name from lk1; #按要求查看指定一个字段内容
select name,sex from lk1; #按要求查看多个字段内容
WHERE
条件查询
语法:SELECT “字段” FROM “表名” WHERE “条件”;
select * from 表名 where 需求;
AND OR
代表且、或、和的意思
语法:SELECT “字段” FROM “表名” WHERE “条件1” {[AND|OR] “条件2”};
select * from 表名 where 需求1 or(需求2 and 需求3);
order by
按关键字排序
语法:SELECT “字段” FROM “表名” [WHERE “条件”] ORDER BY “字段” [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。
select id,name,score from info order by score desc; # 讲查看到的成绩按降序排列
select id,name,score from info order by score; #不加desc 则默认为升序
order by还可以结合where进行条件过滤,筛选地址是杭州的学生按分数降序排列
select name,score from info where address='hangzhou' order by score desc;
ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定
但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义
LIKE
匹配一个模式来找出我们要的资料
语法:SELECT “栏位” FROM “表名” WHERE “字段” LIKE {模式};
select * from info where name like 'li%';# 以li开头的所有名字
select *from info where name like '%si%'; #名字中包含si的名字
select *from info where name like 'liuy_'; # 以liuy开头并且后面仅有一个字符的名字
count(*)
显示当前表的总字段数量
select count(*) as number from info;
显示当前表的总字段数,以number显示
BETWEEN
显示两个值范围内的资料
语法:SELECT “字段” FROM “表名” WHERE “栏位” BETWEEN ‘值1’ AND ‘值2’;
select * from info where score between 80 and 100;
IN
显示已知的值的内容
语法:SELECT “字段” FROM “表名” WHERE “栏位” IN (‘值1’, ‘值2’, …);
select * from info where score in (10,11,98);
AS
此外,AS 还可以作为连接语句的操作符。
创建LK2表,将info表的查询记录全部插入LK2表
create table lk2 as select * from info;
1、创建了一个新表t1 并定义表结构,插入表数据(与info表相同)
2、但是”约束“没有被完全”复制“过来 #但是如果原表设置了主键,那么附表的:default字段会默认设置一个0
相似:
克隆、复制表结构
create table lk2 (select * from info);
limit
limit 限制输出的结果记录
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅 需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句
select * from info limit 3,3;
通配符
通常通配符都是跟 LIKE 一起使用的
子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
PS: 子语句可以与主语句所查询的表相同,也可以是不同表
子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
select name,score from info where id in (select id from info where score >80);
主语句:select name,score from info where id
子语句(集合): select id from info where score >80
子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件
in: 将主表和子表关联/连接的语法
多表查询
IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE。 若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需 求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。 多数情况下,子查询都是与 SELECT 语句一起使用的
查询分数大于80的记录
select name,score from info where id in (select id from info where score>80);
EXISTS
用来测试内查询有没有产生任何结果,类似布尔值是否为真
如果有的话,系统就会执行外查询的SQL语句,若是没有的话,那整个SQL语句就不会产生任何结果
语法:SELECT “字段” FROM “表格1” WHERE EXISTS (SELECT * FROM “表格2” WHERE “条件”);
select name,xueke from info where name in (select name from test1 where score=10);
select name,xueke from info where name in (select name from test1 where score=100);