SQL 学习

table (test1)

col1 col2
22 33
33 22
12 33
55 78
78 55
16 31
31 16

查询哪些行是可以互换的?

SELECT 
    *
FROM
    test1 AS t1,
    test1 AS t2
WHERE
    t1.col1 = t2.col2 AND t1.col2 = t2.col1

执行结果:

| col1 | col2 | col1 | col2 |
| :---: | : ---: | :---: | :---: |
| 16 | 31 | 31 | 16 |
| 22 | 33 | 33 | 22 |
| 31 | 16 | 16 | 31 |
| 33 | 22 | 22 | 33 |
| 55 | 78 | 78 | 55 |
| 78 | 55 | 55 | 78 |

like

like 'xxx%' 匹配所有xxx开头的字符串
like '%xxx%' 匹配包含xxx的所有字符串
like ‘xxxx_’ 匹配xxx开头的长度是4的字符串
like '__' 匹配长度为2的所有字符串

table(test2)

id name sex salary bonus department
1 王五 1000 23 开发一部
2 李四 300 400 开发二部
3 张三 3000 45 开发一部
4 大国 345 67 人事部门
5 小妞 499 99 人事部门

查下每个部门的总工资?

SELECT 
    department, SUM(salary + bonus) AS 工资
FROM
    test.test2
GROUP BY department;

执行结果:

department 工资
人事部门 1010
开发一部 4068
开发二部 700

查下每个人的总工资,按高低排序?

SELECT 
    salary + bonus AS 工资, name
FROM
    test.test2
ORDER BY 工资 DESC

执行结果:

工资 name
3045 张三
1023 王五
700 李四
598 小妞
412 大国

查询工资最高者?

 SELECT 
    MAX(salary + bonus), name
FROM
    test.test2;

查询每个部门工资最多的员工?

SELECT 
    name, MAX(salary + bonus) as salary, department
FROM
    test.test2
GROUP BY department;

table(test3)

name Course score
张三 语文 81
张三 数学 79
李四 英语 88
李四 物理 90
李四 语文 81
王五 化学 78
王五 语文 90
王五 英语 87

用一条SQL 语句 查询出每门课都大于80 分的学生姓名?
第一种方式:


SELECT DISTINCT
    name
FROM
    test.test3
WHERE
    name NOT IN (SELECT DISTINCT
            name
        FROM
            test.test3
        WHERE
            score < 80);

第二种方式:

SELECT 
    name
FROM
    test.test3
GROUP BY name
HAVING MIN(score) > 80;

结果:

name
李四

table(table4)

id number name coursenum coursename score
1 200501 张三 0001 数学 89
2 200502 李四 0001 数学 79
3 200501 张三 0001 数学 89

查询所有的除了id,不重复的数据

SELECT 
    *
FROM
    test.test4 AS t1
WHERE
    EXISTS( SELECT 
            1
        FROM
            (SELECT 
                MIN(id) AS id
            FROM
                test.test4
            GROUP BY number , name , coursenum , coursename , score) AS t2
        WHERE
            t1.id = t2.id);

上面的有点多余嵌套查询:

SELECT 
    MIN(id), number, name, coursenum, coursename, score
FROM
    test.test4
GROUP BY number , name , coursenum , coursename , score;

这2个sql 是同一个结果。

查询所有重复的数据?

SELECT 
    t1.*
FROM
    test.test4 AS t1,
    test.test4 t2
WHERE
    t1.id <> t2.id AND t1.number = t2.number
        AND t1.name = t2.name
        AND t1.coursenum = t2.coursenum
        AND t1.coursename = t2.coursename
        AND t1.score = t2.score;

删除除了自动编号不同, 其他都相同的学生冗余信息?

DELETE FROM test.test4 
WHERE
    id NOT IN (SELECT 
        MIN(id)
    FROM
        test.test4
    GROUP BY number , name , coursenum , coursename , score);

table

一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.

select a.name, b.name
from team a, team b
where a.name < b.name 

table(test)

请用SQL语句实现:从test数据表中查询出所有月份的发生额都比10000科目相应月份的发生额高的科目。请注意:test中有很多科目,都有1-12月份的发生额。
AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。

AccID Occmonth DebitOccur
10000 01 100
10000 01 100
10000 01 100
10000 02 300
10000 03 150
10000 04 130
10000 05 200
10000 06 800
10000 07 900
10000 10 110
10000 11 90
10000 12 103
10000 08 120
10000 09 130
10001 01 140
10001 02 350
10001 03 160
10001 04 530
10001 05 240
10001 06 860
10001 07 970
10001 10 150
10001 11 970
10001 12 163
10001 08 127
10001 09 131
10002 01 10
10002 02 350
10002 03 16
10002 04 530
10002 05 20
10002 06 860
10002 07 90
10002 10 150
10002 11 970
10002 12 163
10002 08 127
10002 09 131

SQL语句:

SELECT 
    *
FROM
    test
WHERE
    accid NOT IN (SELECT DISTINCT
            t.accid
        FROM
            test AS t,
            (SELECT 
                *
            FROM
                test
            WHERE
                accID = 10000) AS t1
        WHERE
            t.occmonth = t1.occmonth
                AND t.debitoccur <= t1.debitoccur);

执行结果:

AccID Occmonth DebitOccur
10001 01 140
10001 02 350
10001 03 160
10001 04 530
10001 05 240
10001 06 860
10001 07 970
10001 10 150
10001 11 970
10001 12 163
10001 08 127
10001 09 131
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 5,560评论 0 6
  • SQL:结构化查询语言 RDBMS:关系型数据库管理系统SQL可以分为两个部分:数据操作语言(DML)和数...
    HerbGuo阅读 1,703评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,897评论 18 399
  • 就是说你
    Wo风轻扬阅读 1,943评论 0 0
  • 第一次写简书,望各位大大口下留情; 因为公司需要,所以用到了购物的功能,搜索了很多demo,没有合适的,因为要么太...
    蓦然暖心阅读 2,649评论 2 2