数据库查询常用语句语法

数据库查询常用语句语法selectxxfrom表格where内容=””检查一个项目是否在列表中可以用in列表,用(‘’,’’,’‘)单引号分隔开名字不在里面namenotin(‘’,‘‘,‘‘)名字在里面namein(‘’,‘‘,‘‘)andorname=’Argentina’orname=’Australia’等同于nameinIN(‘Argentina’,’Australia’)betweenxxandyy…

大家好,又见面了,我是你们的朋友全栈君。

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账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号