SQL学习笔记

SQL基础

连接

请添加图片描述

SQL的引号

字符型需要单引号,数值型不需要单引号

逻辑运算符 与或非等于不等于空非空

与 AND
或 OR
非 NOT
空 IS NULL
非空 IS NOT NULL
等于 =
不等于 <>

GROUP BY

GROUP BY用于结合合计函数,对一个或多个列进行分组
t_order表
在这里插入图片描述
查询每个顾客的订单总额

SELECT
	Customer,
	sum( OrderPrice ) 
FROM
	t_order 
GROUP BY
	Customer

结果
在这里插入图片描述

HAVING

WHERE不能和合计函数共用,故引入HAVING
t_order表
在这里插入图片描述
查找订单总金额少于 2000 的客户。

SELECT
	Customer,
	SUM( OrderPrice ) 
FROM
	t_order 
GROUP BY
	Customer 
HAVING
	SUM( OrderPrice ) < 2000

结果
在这里插入图片描述

distinct

作用:筛选出没有重复的行
语法:
举例:
Course表
在这里插入图片描述
筛选出不重复的TId

SELECT DISTINCT
	TId 
FROM
	course

结果
在这里插入图片描述

TOP(不是所有数据库都支持)

规定返回的行数
student表
在这里插入图片描述
返回3行数据

SELECT
	TOP 3 * 
FROM
	student

Limit(MySQL)

规定返回的行数
student表
在这里插入图片描述
返回3行记录

SELECT
	* 
FROM
	student 
	LIMIT 3

结果
在这里插入图片描述

ROWNUM(Oracle)

控制返回的行数
示例:返回3行数据

SELECT
	* 
FROM
	student 
WHERE
	ROWNUM <= 3

LIKE

模糊匹配,如果不包含通配符,则等同于=
student表
在这里插入图片描述
查询名字开头为“赵”的学生名字

SELECT
	Sname 
FROM
	student 
WHERE
	Sname LIKE '赵%'

结果
在这里插入图片描述

通配符

通配符作用
%匹配任意一个或多个字符
-匹配任意一个字符
[字符列表]匹配字符列表的单一字符,例如[abc],则匹配a或b或c
[^字符列表]或者 [!字符列表]匹配字符列表之外的单一字符,例如[abc],则匹配不为a或b或c的单一字符

IN

作用:在where子句中规定多个值
student表
在这里插入图片描述
查询名字为吴小兰或乌兰的学生名字

SELECT
	Sname 
FROM
	student 
WHERE
	Sname in('吴小兰','吴兰')

结果
在这里插入图片描述

Between

作用:返回介于两个值之间的数据
sc表
在这里插入图片描述

查询分数在0到60之间的

SELECT
	* 
FROM
	sc 
WHERE
	score 
BETWEEN 0 AND 60

结果
在这里插入图片描述

AS

为表、列取别名

course表
在这里插入图片描述
teacher表
在这里插入图片描述

SELECT
	Tname AS '教师名字',
	Cname AS '课程名字' 
FROM
	course AS c
	JOIN teacher AS t 
	ON c.TId = t.TId

结果
在这里插入图片描述

SQL函数

NULL函数

MySQL IFNULL()

sc表
在这里插入图片描述

如果分数为NULL,则输出0

SELECT
	SID,
	IFNULL( score, 0 ) as score
FROM
	SC

结果
在这里插入图片描述

SQL Server ISNULL()

如果分数为NULL,则输出0

SELECT
	SID,
	ISNULL( score, 0 ) as score
FROM
	SC

AVG()

取平均数
计算学生平均分数

SELECT
	avg( score ) 
FROM
	sc

count()

计算行数
示例:计算学生人数

SELECT
	count( * ) 
FROM
	student

first()(不是所有数据库都支持)

取第一个记录

SELECT
	first( score ) 
FROM
	sc 

last()(不是所有数据库都支持)

取最后一个记录

SELECT
	last( score ) 
FROM
	sc 

max()

取最大的记录

SELECT
	max( score ) 
FROM
	sc 

min()

取最小的记录

SELECT
	min( score ) 
FROM
	sc 

ucase()

转为大写
示例:将客户名字转为大写

SELECT DISTINCT
	UCASE( Customer ) 
FROM
	t_order

lcase()

转为小写
示例:将客户名字转为大写

SELECT DISTINCT
	LCASE( Customer ) 
FROM
	t_order

mid()

截取字符串
语法

SELECT MID(ColumnName, start [,length]) FROM TABLE_NAME

参数说明

参数说明
ColumnName必需,列名
start必需,规定开始位置(起始位置为1)
length可选,截取的长度,若省略,则返回剩余字符串

截取客户名字的前3个字符

SELECT DISTINCT
	MID(Customer,1,3)
FROM
	t_order

结果
在这里插入图片描述

len()(不是所有数据库都支持)

获取长度
语法

SELECT LEN(column_name) FROM table_name

示例

SELECT LEN(City) as LengthOfCity FROM Persons

round()

保留小数
t_order表
在这里插入图片描述

订单金额保留1位小数

SELECT
	ROUND( OrderPrice, 1 ) 
FROM
	t_order

结果
在这里插入图片描述

now

当前时间

SELECT
	now() 
FROM
	t_order

format()

格式化

SELECT
	FORMAT(Now(),'YYYY-MM-DD')
FROM
	t_order

MySQL DATE_FORMAT()格式化时间

SELECT
	DATE_FORMAT(now() ,'%Y/%m/%d')
FROM
	t_order

结果
在这里插入图片描述

如何写存储过程

  1. 打开navicat

  2. 点击函数-新建函数-选择“过程”-完成

  3. 模板如下:

    CREATE OR REPLACE
    PROCEDURE "这里是存储过程名" AS
    BEGIN
       -- routine body goes here, e.g.
       -- DBMS_OUTPUT.PUT_LINE('Navicat for Oracle');
    END;
    
  4. 在BEGIN和END之间写sql语句

    CREATE OR REPLACE
    PROCEDURE "P_T02_0901_09_CLEARTABLE" AS
    BEGIN
       DELETE FROM T02_BUSI_090101_A04_CLEAR_TAB;
       DELETE FROM T02_BUSI_090101_A04_ORDER_TAB;
    END;
    
  5. 点击保存,为这个存储过程名为P_T02_0901_09_CLEARTABLE

  6. 调用:

    call P_T02_0901_09_CLEARTABLE()
    
  7. 大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值