sql总结
一.where后面可接的查询条件:
1)sql in查询,查询在符合条件list里的数据,list可以是(select子查询)
2)sql not in查询,不再符合条件list里的数据
3)like模糊查询:通配符%代表一个或多个通配字符。_代表通配一个字符。
但like模糊查询,只能指定具体字符,指定明确的string值,不能匹配变量字段做模糊参数,如果 需要用字段变量做模糊匹配,就要用到concat()函数
4)like+concat('%',name):字段变量值作为模糊参数查询
5)字段=等号查询,not 字段=等号查询,或者字段<>值,也代表不等于.
列出非软件专业的所有学生的学号及名字。
select sid,name
from student
where 专业<>"软件专业"
或
select sid,name
from student
where not 专业="软件专业"
6)区间查询between x and y
7)and连接多个条件。
:列出1号课成绩大于80分的学生的学号及成绩
具体值:一号课,>80分
select sid,score
from score
where courseID = "1号课" and score >“80”
二.sql语句书写经验
1.需求里描述“每个”,"所有"等信息时,基本 都要用group by分组了。如;列出每个用户的存款余额,列出各机构的每日交易额。列出各个课程的平均分。
:列出各科成绩的最高分,最低分,平均分,和选课人数
select courseID,max(score) as "最高分",min(score) as "最低分",avg(score) as "平均分",count(distinct(surdentID)) as "总人数"
from score_tbl
group by courseID
2.distinct也是函数,用法是distinct(字段),必须用括号包起来字段
3.from后面也可以加select子查询,因为每个子查询的结果也是一张表,只是临时表而已。
4.只要需求里有具体变量值出现了,那么就要在sql语句里匹配具体值信息,如:如工资多于2300元的员工需要向北京发货。salary > 2300 and 地址=‘北京’
5.inner join内连接可以省略inner书写的,直接a join b就代表内连接
6.表连接,join的on条件是写在from从句里的,而不是where从句。如select name from tableA a join tableB b on a.id=b.id
7.使用数据库函数时,尽量用别名as命名,注意是需要as关键字的。如:select sid as "学号",avg(score) as "平均分" from score_t group by sid
8.having条件只用来修饰group by的结果,没有group by是不能用having的。
having与where的区别是having可以对接数学函数avg().count(),max()等。而where是不能的。
9.from后面是可以接一个查询么?:可以的,sql查询出来的就是一张表,而from就是从某张表里查数据。注意要用()将子查询包起来,便于查看
10.注意要用()将子查询包起来,便于查看。
select * from (select * from table_a a where a.name="David") temp left join tableB b on temp.id = b.id;
(temp也是一张表,临时表也可以起别名)
11.temp也是一张表,临时表也可以起别名
三.表连接
1.自然连接:自然连接是通过where指定外键连接字段,只显示符合条件的所有记录。自然连接只显示符合条件的所有记录。
2.内连接:内连接,可以省略写inner join的inner,直接写a join b就代表内连接。内连接也是只显示符合条件的所有记录。
3.左外连接
4.右外连接
四.如何提高数据库的运行效率?
1.降低范式,增加冗余。适当增加冗余课题提高查询的效率,但写的效率也降低了。因为多次写了。
2.适当使用存储过程,存储过程只需要编译一次,后面在数据库里可多次运行。降低数据库的编译
3.将一些复杂运算,在应用里做。减少数据的运算压力
4.引入分表:水平分表或垂直分表