大家好,又见面了,我是你们的朋友全栈君。
select xx from 表格 where 内容=””
检查一个项目是否在列表中
可以用in 列表,用(‘ ’ , ’ ’ ,’ ‘)单引号分隔开
名字不在里面 name not in(‘ ’, ‘ ‘, ‘ ‘)
名字在里面 name in (‘ ’, ‘ ‘, ‘ ‘)
and or
name =’Argentina’ or name =’Australia’等同于 name in IN(‘Argentina’,’Australia’)
between xx and yy介于什么之间
有什么关键字眼 可以用 like
%表示多个元素,_表示单个元素
如果多重判断like 前后的主语也必须添加
%xx 表示xx结尾的关键字,xx%表示以xx开头的关键字
SELECT name FROM world WHERE name LIKE ‘%Y’
SELECT name FROM world WHERE name LIKE ‘c%ia’
SELECT name FROM world WHERE name LIKE ‘%a%a%a%’
SELECT name FROM world WHERE name LIKE ‘_t%’ ORDER BY name desc
(order by 表示排序 desc为降序,不写默认为升序,即为asc)
SELECT name FROM world WHERE name LIKE ‘____’
(表示由四个元素组成,一个_表示一个单词)
SELECT name FROM world WHERE capital = concat(name, ‘ City’)
(首都等于国家加上city)
select capital,name from world where capital like concat(‘%’,name,’%’)
(首都中要有国家的出现) 这里不可用等号
拼接concat(列元素,’后缀加上的元素’)
替换元素 replace(‘vessel’,’e’,’a’) 将e变为a 即输出vassal
replace(capital,name,’’)将空字符替代name,除去capital中的name剩下内容
提取元素 MID(column_name, start[, length] ) FROM table_name
参数:
column_name:要提取字符的字段。
start:规定开始位置(起始值是1)。
length:可选参数。要返回的字符数。如果省略,则MID()函数返回剩余文本
round(f,p)p为1表示f有一位小数,-1表示小数点左边置0
case 可以对数据表进行多重筛选多重选择
CASE允许您在不同的条件下返回不同的值。
如果没有任何条件匹配(也没有其他条件),则返回NULL。
CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE def_value
END
ps:
SELECT name, population
,(CASE WHEN population<1000000 THEN ‘small’
WHEN population<10000000 THEN ‘medium’
ELSE ‘large’
END)s1 s1为别名
FROM world
id between xx and yy 介于的范围
跳脱字符:单引号
不能把一个单引号放在字符串中,在数据库的字符串定义都是用单引号,因此内容有单引号需要输出,将两个单引号使用,输出即为一个单引号
即输出x’x 则为字符串’ x’’x’
群组函数 使用 SUM, Count, MAX, DISTINCT 和 ORDER BY.
计算综合sum()
计数多少个 count()
count(*) 可以统计所有的行数,包括为null的行
count(1) 统计的是第一个子字段的行数,为null的行数 不统计。
sql 语句中 有时候1 代表对应的 第一个字段,第二个字段 一次类推。
去除重复 distinct() 只能放在开头
一般作用一个元素。如果表格元素多,但只作用一个元素,可以外加一个count (distinct 元素),或者后面加一个group by 元素
max() 取最大值或者是最后最新的值
min() 取最小值或者是首次颁发的值
group by 分组表达式
指定 GROUP BY 时,先排序后分组,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中(没有群组函数都应该包含在group by)或者 GROUP BY 表达式必须与选择列表表达式完全匹配
SELECT continent, SUM(population) FROM world GROUP BY continent
select continent,population from world group by continent
having 去掉不符合条件的组
使用group by 子句对数据进行分组,去掉不符合条件的组
WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数
使用where :select continent ,count(name) from world where population >=10000000
group by continent
使用having:select continent from world group by continent
having sum(population) >=100000000
union显示两个表特定数据
将union放在两个select中间,只是将两个结果联结起来一起显示,并不是联结两个表UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复
limit 限制查询结果返回的数量,常用于分页查询
select * from tableName limit i,n
# tableName:表名
# i:为查询结果的索引值(默认从0开始),当i=0时可省略i
# n:为查询结果返回的数量
# i与n之间使用英文逗号”,”隔开
join 合并表格信息,多用于两个表格以上
两个表格:from 表格1 join 表格2 on 两表格相等的信息交集
如果两个表格有相同的名字名,得用表格名.匹配项调用
join 默认都是inner join
三个表格以上:
ps:SELECT * FROM
movie JOIN casting ON movie.id=movieid
JOIN actor ON actorid=actor.id
WHERE actor.name=’John Hurt’
ps:
FROM game JOIN goal ON id=matchid
或者是 from goal join game on matchid=id
或者是 from goal join game on game.id=goal.matchid
(必须表格名和匹配项前后一一对应)
join的自我加入
SELECT * FROM route a join route b ON (a.num=b.num)
WHERE a.num=b.num AND a.company=b.company
COALESCE()函数,这个函数主要用来进行空值处理
COALESCE(x,y,z) = x if x is not NULL
COALESCE(x,y,z) = y if x is NULL and y is not NULL
COALESCE(x,y,z) = z if x and y are NULL but z is not NULL
COALESCE(x,y,z) = NULL if x and y and z are all NULL
子查询
select的查询可以当作是一个值,在另一个表中查询
相等判断 SELECT name, continent FROM world
WHERE continent IN(SELECT continent FROM world WHERE name=’Brazil’ OR name=’Mexico’)
大于判断 SELECT name FROM world WHERE population >(SELECT population FROM world
WHERE name=’Russia’)
介于之间的判断 select name,population from world
where population > (select population from world where name=’Canada’ ) and population < (select population from world where name=’Poland’ )
我們可以用ALL 這個詞對一個列表進行>=或>或<或<=充當比較。例如,你可以用此查詢找到世界上最大的國家(以人口計算):
SELECT name
FROM world
WHERE population >= ALL(SELECT population
FROM world
WHERE population>0)
提醒事项:
当select 语句块中出现function与常列时,需要在where语句块之后加入group by语句,否则会报错
疑难题目:
SELECT name, continent,
CASE
WHEN continent = ‘Oceania’ THEN ‘Australasia’
WHEN continent IN (‘Eurasia’,’Turkey’) THEN ‘Europe/Asia’
WHEN continent = ‘Caribbean’ THEN
CASE WHEN name LIKE ‘B%’ THEN ‘North America’
ELSE ‘South America’ END
ELSE continent END
FROM world
ORDER BY name
case when 和最近的一个end相匹配
列出爵士的獲獎者、年份、獎頁(爵士的名字以Sir開始)。先顯示最新獲獎者,然後同年再按名稱順序排列。
SELECT winner, yr, subject FROM nobel
WHERE winner LIKE ‘Sir%’
ORDER BY yr DESC , winner
顯示有多少年沒有頒發醫學獎。
SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = ‘Medicine’)
選擇代碼以顯示哪一年有頒發醫學獎,但沒有頒發和平或文學獎
SELECT DISTINCT yr
FROM nobel
WHERE subject=’Medicine’
AND yr NOT IN(SELECT yr FROM nobel
WHERE subject=’Literature’)
AND yr NOT IN (SELECT yr FROM nobel
WHERE subject=’Peace’)
(‘France’,’Germany’,’Spain’)(“法國”,“德國”,“西班牙”)的總人口是多少?
select sum(population) from world
where name in (‘France’,’Germany’,’Spain’)
找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent 洲份和population人口。
select name,continent,population
from world x
where 25000000>=all (select population from world y where x.continent=y.continent)
有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。
select name ,continent
from world x
where population/3>=all(select population
from world y
where y.continent=x.continent
and population>0
and y.name != x.name )
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132043.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...