SQL-MySQL

1. 创建数据库

CREATE DATABASE IF NOT EXISTS abcdefg DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS abcdefg1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2. 创建数据表

USE abcdefg1;

DROP TABLE IF EXISTS abc;

CREATE TABLE abc(

  id int(11) NOT NULL,

  name varchar(40) CHARACTER SET utf8 DEFAULT NULL,

  PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 插入数据

INSERT INTO abc VALUES ('1', 'winter');

INSERT INTO abc VALUES ('2', 'winter');

INSERT INTO abc VALUES(3,'winter'),(4,'winter');

4. 清空数据表

TRUNCATE abc;

abc为表名

5. where  6. group by

select * from monthfenwei where yearmonth = #{yearmonth}

select FLOOR(avg(aqi)) as aqiAvg,province_name as provincename

from china_day

where pdate=#{date}

group by provincename

一行一行的判断

SELECT province_name,floor(AVG(aqi)) AS aqiAvg,pdate

FROM china_hour_copy1

WHERE pdate = '2022-5-25 22:00:00'

GROUP BY province_name ASC;

7 ${} 、 #{}、 ‘%’  #{} ‘%’

必须采用${}的情况

select prov_str as provincename,city_str as cityname,date_str as day,api_zs_str as aqi from ${provincename} where date_str = #{date}

select prov_str as provincename,city_str as cityname,date_str as day,api_zs_str as aqi

from ${provincename}

order by ${cityname}

采用:

select * from china_hour_copy1

where province_name like '%' #{provincename} '%'

                                     like CONCAT('%',#{provincename},'%')

https://blog.csdn.net/cmjimmy/article/details/108202647

不采用:

select * from china_hour_copy1

where province_name like '%${provincename}%'

------#{province_name}  占位符,有效防止SQL注入。不需要考虑参数类型 可以使用value或其它名称。

------${province_name}  拼接符,不能防止SQL注入。必须考虑参数类型 只可以使用value

8 like

------like------% _ [] [-] [^]

%三% ,%为任意0个或多个字符,把含有三的记录全部找出来

_三_    ,_为任意单个字符,三个字,中间字为三

[012]三, []为匹配0三,1三,2三,但不是012三。

即[0-2],[-]为范围 0 1 2

[^012] ,[^]为非,排除0 1 2 3的记录

=     !=    and       or       like

9 having

from where group by select 之后的    对分组之后的结果进一步过滤

如,查询每个班中(group by),人数大于3人(count)的班级。

正确写法 select结束后having

select count(1) as n from classes group by classname

having n>2

显示n一列

select id from classes group by classname

having count(1) >2

不显示count(1)一列

错误写法

select count(1) as n from classes group by classname

where count(1)>2

10 order by

having之后是order by执行

order by id desc

两列排序

order by id, n;

order by id desc, n desc

select * from china_month_data where cityname=#{cityname}

order by year_name asc, month_name asc;

11 limit  a, n

a 指的是索引,从0开始

n 指的是取记录条数

limit 0,2 从第1条记录开始,查询2条记录

12 CASE WHEN

https://blog.csdn.net/yongfeng929/article/details/73733028

https://blog.csdn.net/pksport/article/details/120726276

互换班级:将1班的学生 转入进2班,将2班的学生转入进1班。


case when 表达式

then 输出

when 表达式

then 输出

ELSE 输出

end

13 聚集函数  CASE WHEN 

select * from monthfenwei

<where> 

<if test="cityname != null">

and cityname = #{cityname}

</if>

<if test="season != null"> and season = #{season} </if>

</where>



14 JOIN

from 表1 join 表2   新生成的一个表

from 表1 join 表2 on 表1.cid=表2.cid  新生成的一个表

(1)不加on条件,不提倡。where可以实现,但是过滤的时间不对,where是 n*m条中过滤,是需要优化的。即加on,先做对比


表1stu 5 条数据,表2classes 2条数据;

表1 join 表2 为 5*2=10条数据

如果join后,有相同的字段,则stu.id    classes.id

(2)加on条件

join后生成的是5条数据

select ts.season_name,cm.* 

from china_month_data cm left join time_season ts 两个表

on cm.season_code=ts.season_code     能使两个表连接起来的字段

 where cm.cityname=#{cityname} 

order by cm.year_name asc, cm.season_code asc;

15 Left JOIN和right join

left join和join的区别

left join 必须有on条件,

left join 在join的基础上,会进一步检查左表的数据是否都包含在新生成的表中。

是,与join没区别

不,由于有on,因此是有不包含的行的,这些行尽管超出了条件范围。但也应加入新表,数据用null填充。不会遗漏掉左表任一一条数据。

FORM A left join B 也就是from B right join A

16 多表join left join

from A join B on ~ join C on~ join D ON

每一个join on 是一个组合

使用场景

查询同学A的班主任名称

查询哪些同学还没有分班。

select * from stu left join class on classid=id where classid 

错误写法where classid=null

正确写法where classid is null

正确写法where classid=''

查询员工中高于经理的员工


Student(sid,sname,sage,ssex)

Course(cid,cname,tid)

Teacher(tid,tname)

SC(sid,cid,score)

成绩表

CREATE TABLE SC(

  sid varchar(11) CHARACTER SET utf8 NOT NULL,

  cid varchar(40) CHARACTER SET utf8 DEFAULT NULL,

score int(3) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO SC values ('01','01',90),('01','02',100),('02','01',80),('02','02',70),('03','01',60),('03','02',70),('04','01',50),('04','02',40);

学生表

drop table  if exists student;

CREATE TABLE student(

sid varchar(11) character set utf8 not null,

sname varchar(11) character set utf8 not null,

primary key(sid)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO student values ('01','a'), ('02','b'), ('03','c'), ('04','d');


题目1:查询01课程比02课程成绩高的 学生信息和课程分数

select s.*,sc1.cid as '课程01',sc1.score,sc2.cid as '课程02',sc2.score from SC as sc1 join SC sc2 on sc1.cid='01' and sc2.cid='02' and sc1.sid=sc2.sid  join Student as s on sc1.sid = s.sid where sc1.score>sc2.score;

题目2:查询平均成绩大于等于60分的学生信息和平均成绩

select s.*,avg(sc.score) from SC as sc join Student as s on sc.sid=s.sid group by sc.sid;

select s.*,avg(sc.score) as avgscore from SC as sc join Student as s on sc.sid=s.sid group by sc.sid where avgscore>60;

题目3 查询后一天温度比前一天高的日期

select w2.date from weather w1 join weather w2 on w1.id+1=w2.id where w1.temperature < w2.temperature; 

17 子查询

join  on  where 也可以用子查询

from student as s join class as c on c.manager='小黄'  and s.classid = c.id;

或者

from student as s join class as c on s.classid = c.id where c.manager='小黄' ;


先执行子查询,再判断

select * from student  where classid = (select id from class where manager='蓝');

drop table  if exists classes;

CREATE TABLE classes(

cid varchar(11) character set utf8 not null,

manager varchar(11) character set utf8 not null,

primary key(cid)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO student values ('1','蓝'), ('02','樊'), ('03','马');

查询班主任为蓝所带的学生

查询班主任为蓝和樊所带的学生

1. where 子查询

select  s.* from student as s where s.classid = (select c.id from classes as c where c.manager = '蓝' )

select  s.* from student as s where s.classid in (select c.id from classes as c where c.manager in ('蓝','樊') )

select  s.* from student as s where (s.classid, '蓝' ) in (select c.id,c.manager from classes as c where c.manager in ('蓝','樊') )

2. from 子查询

在 from 里面的子查询必须有别名

select student.*

from student join (select * from classes where manager="蓝") as C on C.cid=student.cid;

3. select 子查询

每个班学号最大的学生信息

错误 select max(id),name from student group by classid

因为最大的学号是对的,但是对应的名字不对。

正确  select max(id),name from student group by classid having max(id) = id;

正确 select name from student where id in (

select max(id) from student group by classid

)

18 UPDATE 更新

UPDATE MYTABLE 

SET sname='aa' where log_time between '2019-01-01' and '2019-01-31'

UPDATE mytable join histable on mytable.url = histable.url 

SET sname='aa' where log_time between '2019-01-01' and '2019-01-31'

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

推荐阅读更多精彩内容