SQL语句复习

2020.5.1-5.6

决定重新开始学习sql了  使用记录


http://xuesql.cn/lesson/select_queries_introduction    暂时选择的这个学习网站 感觉还不错

https://sqlzoo.net/w/index.php?title=Special:CreateAccount&returnto=SQL+Tutorial 上面这个网站学习结束再看看这个网站的内容 

leetcode上面也可以做sql练习



1.刚开头 就遇到一个大学学习时好像也没有遇到过的问题,总结一下大概是需要在查找到的数据中新增一列,指定了列名,改列数据都为同一个值:

select id,title,'美国' as country from movies

2.条件查询where里面的条件可以是数据的比较:

    ·某个列名和一个固定数字的比较(>,>=,<,<=,=,!=)

    ·某个列名和两个固定数字的比较即展示一段范围(between and,not between and)

    ·某个列名和一个列表里面的数字或者字符比较(in ,not in):

        col_name NOT IN (1, 3, 5)

        col_name IN ("A", "B", "C")                ——字符要加双引号

    ·某个列名里面大概包含了什么字符:

        col_name LIKE "%AT%"                     ——百分号是通配符,表示左右什么数据不限

        如果没有通配符那like的效果就和上面的 =、!=一样

        col_name LIKE "AN_"                         ——这个后面的下划线表示AN后面有且仅有1个字符


3.查询结果过滤和排序

    ·排重 在要找的列名前加 distinct

    ·limit 要显示多少条数据,offset从哪里开始显示:

        select title from movies where director like "john lasseter" 

        order by length_minutes limit 1 offset 2

        (找出john lasseter的排名第三长的电影,显示电影名称即可)

    ·两条排序规则,按照先后顺序,第一条第二天按顺序写中间逗号隔开

        order by director asc,yesr desc 

4.多表联合JOINs

    ·inner join(内连接)        

        select * from movies inner join boxoffice on movies.id=boxoffice.movie_id

        这样找出来的数据是把两张表的列名属性都显示在一起

        但是这样只会按照On的条件,将都有的数据进行显示,不匹配的行会丢失(数据交集)

    ·left\right\full join(外连接)        左边+数据交集、右边+数据交集、全部数据

        这样找就是把不匹配的行也显示出来,没有属性的部分null会自动填充

        select building_name from buildings left join employees 

            on buildings.building_name=employees.building where name is null

            (找到还没有雇员的办公室)

5.使用运算表达式

    select title,(domestic_sales+international_sales)/length_minutes as sales from movies 

    inner join boxoffice on movies.id=boxoffice.movie_id where director like "John Lasseter" 

    order by sales desc limit 3

    计算字符串长度函数:length()

6.统计函数

    count()、sum()、min()、max()、avg()

    count(id):id有多少个

    sum(math):班级的数学成绩总和  (一直把这个求列总和的方式和求行总和搞混)

    分组统计:group by  如一个列属性里有三类数据,分别对这三类进行统计

    ·就职年份最高的雇员:

        SELECT name,max(years_employed) FROM employees

    ·每栋办公室按人数排名,不要统计无办公室的雇员

        SELECT building,count(name) FROM employees where building is not null 

        group by building order by count(name) desc (注意:where写前,group写后)

    ·就职1,3,5,7年的人分别占总人数的百分比率是多少(给出年份和比率"50%" 记为 50)

        select years_employed,count(*)*100/(select count(*) from employees) as rate 

        from employees where years_employed in(1,3,5,7) group by years_employed

    对分组完的数据进行筛选:having

你可能感兴趣的:(SQL语句复习)