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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

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