<SQL>《Commandes SQL (y compris des exemples de phrases) Édition bien organisée (2)》

Aller à "Commandes SQL (y compris des phrases d'exemple) version bien organisée (1)

8 fonctions

8.1 Fonctions de traitement de texte

fonction illustrer
GAUCHE() (ou utilisez la fonction substring) renvoie les caractères à gauche de la chaîne
LONGUEUR() (Utilisez également DATALENGTH() ou LEN()) Renvoie la longueur de la chaîne
INFÉRIEUR() (Access utilise LCASE()) pour convertir la chaîne en minuscules
LTRIM() Supprimer les espaces à gauche de la chaîne
DROITE() (ou utilisez la fonction substring) renvoie les caractères à droite de la chaîne
RTRIM() Supprimer les espaces à droite de la chaîne
SOUNDEX() Renvoie la valeur SOUNDEX d'une chaîne
SUPÉRIEUR() (Access utilise UCASE()) pour convertir les chaînes en majuscules

8.2 Fonctions de traitement numérique

fonction illustrer
ABDOS() renvoie la valeur absolue d'un nombre
CS() Renvoie le cosinus d'un angle
EXP() Renvoie la valeur de l'exposant d'un nombre
PI() retour pi
PÉCHÉ() Renvoie le sinus d'un angle
CARRÉ() Renvoie la racine carrée d'un nombre
BRONZER() Renvoie la tangente d'un angle

8.3 Fonctions de traitement du temps

fonction illustrer
maintenant() date du jour
curé() date actuelle
heure actuelle() heure actuelle
Différence de temps DATE_ADD() # Ajoute l'intervalle de temps spécifié à la date
DATE_SUB() # Soustrait l'intervalle de temps spécifié de la date
Par exemple : DATE_SUB(curdate(), INTERVAL 7 DAY) moins sept jours à partir de la date actuelle
Fonction de décalage horaire
timestampdiff

Syntaxe : timestampdiff(unit, begin, end)
begin et end peuvent être de type DATE ou DATETIME, et les paramètres peuvent être de types mixtes.

8.3.1 Convertir l'horodatage au format personnalisé from_unixtime

fonction illustrer
Format from_unixtime(timestamp(horodatage à convertir),'%Y-%m-%d %h:%i:%s')
%Y années 4e place, 2023
%y année, 2 chiffres, 23
%M nom du mois
%m mois, valeur (00-12)
%D jour du mois avec préfixe anglais
%d Jour du mois, valeur (00-31)
%Son 00:00:00

8.3.2 Convertir le format d'heure CONVERT()

fonction illustrer
Format CONVERT(expr,type)
expr : la valeur à convertir
type : le type de données à convertir
DATE Convertir expr au format 'AAAA-MM-JJ'
DATEHEURE Convertir expr au format 'AAAA-MM-JJ HH:MM:SS'
TEMPS Convertir expr au format 'HH:MM:SS'
CARBONISER Convertit expr au format CHAR (chaîne de caractères de longueur fixe)
SIGNÉ Convertir expr au format INT (entier signé)
NON SIGNÉ Convertir expr au format INT (entier non signé)
DÉCIMAL Convertir expr au format FLOAT (virgule flottante)
BINAIRE Convertir expr au format binaire

8.3.3 Obtenir l'heure du système

fonction illustrer
SGBD fonction/variable
Accès MAINTENANT()
DB2 DATE ACTUELLE
MySQL DATE ACTUELLE()
Oracle SYSDATE
PostgreSQLName DATE ACTUELLE
serveur SQL AVOIR UN RENDEZ-VOUS()
SQLiteName Date('maintenant')

8.4 fonction d'agrégation (fonction d'agrégation)

fonction illustrer
MOY() renvoie la moyenne d'une colonne
COMPTER() Renvoie le nombre de lignes dans une colonne
MAX() renvoie la valeur maximale d'une colonne
MIN() renvoie la valeur minimale d'une colonne
SOLEIL() Renvoie la somme des valeurs dans une colonne
Exemple : composition de fonctions d'agrégation SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products

COALESCE

按顺序对其参数求值并返回第一个非NULL值。仅当所有参数均为NULL时结果才为NULL。
为消息中可能不存在的字段提供缺省值。
表达式:COALESCE(Body.Salary,0) ,如果消息中有SALARY字段,将返回它的值,如果该字段不存在,将返回0.

9 子查询

9.1 子查询

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序

9.2 GROUP BY & ORDER BY

在这里插入图片描述
例1:SELECT vend_id,count() AS num_prods FROM Products GROUP BY vend_id
例2:SELECT cust_id,count() AS orders FROM Orders GROUP BY cust_id HAVING COUNT() >=2

9.3 分组排序 (row_number()over())

(1)对查询结果进行排序(无分组)

SELECT empno,WORKDEPT,SALARY,Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee
empno WORKDEPT SALARY Row_Number()
000010 A00 152750 1
000110 A00 66500 2
000120 A00 49250 3
200010 A00 46500 4
200120 A00 39250 5
000020 B01 94250 1
000030 C01 98250 1
000130 C11 73800 2

(2)对查询结果进行排序(无分组)

SELECT empno,WORKDEPT,SALARY,Row_Number() OVER (ORDER BY salary desc) rank FROM employee
empno WORKDEPT SALARY Row_Number()
000010 A00 152750 1
000030 C01 98250 2
000070 D21 96170 3
000020 B01 94250 4
000090 E11 89750 5
000100 E21 86150 6
000050 E01 80175 7
000130 C11 73800 8
000060 D11 72250 9

小结:row_number() over()和rownum差不多,功能更强一点。(可以在各个分组内从1开始排序)

(3)rank() over() 是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

SELECT  WORKDEPT,SALARY,rank() OVER (partition by workdept ORDER BY salary ) as dense_rank_order FROM emp order by workdept
WORKDEPT SALARY rank()
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 73800 3

(4)dense_rank() over() 是连续排序,有两个第二名时仍然跟着第三名。相比之下,row_number是没有重复值的

SELECT  WORKDEPT,SALARY,dense_rank() OVER (partition by workdept ORDER BY salary ) as dense_rank_order FROM emp order by workdept
WORKDEPT SALARY dense_rank()
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 72420 2
C01 73800 3

Je suppose que tu aimes

Origine blog.csdn.net/tangcoolcole/article/details/130809015
conseillé
Classement