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.引入分表:水平分表或垂直分表

posted @ 2018-05-21 00:04  跨境电商杂货铺  阅读(173)  评论(0编辑  收藏  举报