sql教程笔记

SQL

https://www.w3school.com.cn/sql/sql_quickref.asp

快速参考


SQL 测验 (w3school.com.cn)

SELECT * FROM Persons

SELECT DISTINCT 列名称 FROM 表名称
--distinct去重

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
--操作符 = <>不等于 > < >= <= between like

SELECT * FROM Persons WHERE City='Beijing'
--选取居住在城市 "Beijing" 中的人

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
--and or 组合使用

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
--以逆字母顺序显示公司名称,并以数字顺序显示顺序号

SELECT * INTO new_table FROM old_table
--从一个表取数据存到另一个表

SELECT column_name INTO newtable FROM oldtable
--插入指定列

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'


DELETE FROM 表名称 WHERE 列名称 = 值

SELECT TOP 2 * FROM Persons
--"Persons" 表中选取头两条记录。
SELECT TOP 50 PERCENT * FROM Persons
--选择百分之50 

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
-- % 替代一个或多个字符 
-- _ 下划线仅替代一个字符
-- [charlist] charlist中的任何单一字符
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'
-- 不以 "A" 或 "L" 或 "N" 开头
SELECT * FROM Persons
WHERE City LIKE 'N%'
--选取居住在以 "N" 开始的城市里的人
-- LIKE '%g' 以 "g" 结尾
-- LIKE '%lon%' 包含 "lon" 
-- NOT LIKE '%lon%' 不包含 "lon" 

SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')
-- 上表中选取姓氏为 Adams 和 Carter 的人

SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
-- 以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人

SELECT column_name AS alias_name
FROM table_name
-- 别名 AS

SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'


SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 
-- 通过引用两个表的方式,从两个表中获取数据:谁订购了产品,并且他们订购了什么产品?

-- 

JOIN

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'

UNION

SELECT INTO

CREATE DATABASE database_name
-- 创建数据库

约束

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT
-- 下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
-- 命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
-- 表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束
ALTER TABLE Persons
ADD UNIQUE (Id_P)
-- 命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
-- 撤销 UNIQUE 约束
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

Primary Key

语法和UNIQUE差不多 PRIMARY KEY替换UNIQUE

FOREIGN KEY



CHECK

限制列中值的范围

CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
-- 限制Id_P列必须只包含大于0的整数
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
-- 命名CHECK约束,以及多个列定义CHECK约束


DEFAULT 约束

SQL Default方法用法 _SQL/oracle-w3school教程 (hechaku.com)

插入默认值 以下为从创建表时的语法

city varchar(255) DEFULT 'Sandnes'
-- 通过函数插入系统值
orderDate date DEFAULT GERDATE()

在已有表时创建DEFAULT约束

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'

撤销

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

INDEX 索引

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

DROP

DROP INDEX index_name
-- 删除索引
DROP DATABASE 数据库名称
-- 删除数据库
DROP TABLE 表名
--删除表
TRUNCATE TABLE 表名
-- 删除数据但是不删除表

Alter

ALTER TABLE

-- 添加列
ALTER TABLE table_name
ADD column_name datatype
-- 删除列
ALTER TABLE table_name 
DROP COLUMN column_name
-- 改变列的数据类型
ALTER TABLE table_name
ALTER COLUMN column_name datatype

Increment

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

view

SQL View方法用法 _SQL/oracle-w3school教程 (hechaku.com)

用封装思想理解

-- 更新视图
-- CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

-- 向 "Current Product List" 视图添加 "Category" 列
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

-- 撤销视图
-- DROP VIEW Syntax
DROP VIEW view_name

Date

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD

  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS

  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS

  • TIMESTAMP - 格式: 唯一的数字

NULL

IS NULL

IS NOT NULL

如果UnitsOnOrder 是null就返回0,不这样写 直接写UnitsInStock + UnitsOnOrder就会返回结果NULL

关系数据库管理系统(Relation Database Management System)RDBMS

是oracle的基础)

functions

Oracle中的SQL函数(全)_心有—林夕的博客-CSDN博客_oracle sql

[oracle数据库 SQL语句、内置函数大全 - yinyanlei - 博客园 (cnblogs.com)](https://www.cnblogs.com/bekeyuan123/p/6973195.html#:~:text=oracle数据库 SQL语句、内置函数大全 1 USER 返回登录名函数 SELECT USER FROM,SYS_CONTEXT (namespace%2Cparameter) 返回oracle已经创建的context,名为USERENV的属性对应值 4 DECODE (expr%2Csearch%2Cresult [%2Csearch1%2Cresult1] [%2Cdefault]))

-- 内建sql函数
SELECT function(列) FROM 表
-- 平均值
SELECT AVG(column_name) FROM table_name
-- 找到 OrderPrice 值高于 OrderPrice 平均值的客户
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

-- COUNT() 函数返回匹配指定条件的行数。
-- 返回指定列的值的数目
SELECT COUNT(column_name) FROM table_name
-- 返回表中的记录数
SELECT COUNT(*) FROM table_name
-- 返回指定列的不同值数
SELECT COUNT(DISTINCT column_name) FROM table_name

-- FIRST() 返回指定的字段中第一个记录的值
SELECT FIRST(column_name) FROM table_name
-- LAST() 返回最后一个记录
SELECT LAST(column_name) FROM table_name
-- FIRST 和 LAST函数说可以结合order by用 但没给例子

-- MAX() 返回最大值
SELECT MAX(column_name) FROM table_name
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
-- MIN 同理
-- SUM + GROUP BY 使用
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

-- UCASE()转化为大写
SELECT UCASE(column_name) FROM table_name
-- 选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写
SELECT UCASE(LastName) as LastName,FirstName FROM Persons
-- LCASE() 转为小写 用法和UCASE()同理

-- MID()提取字符
SELECT MID(column_name,start[,length]) FROM table_name
-- column_name必须 start必须 起始值1 length可选,要返回的字符数。省略length则返回剩余文本
SELECT MID(City,1,3) as SmallCity FROM Persons
-- SmallCity (结果集展示如左)
-- Lon
-- New

-- LEN() 返回文本字段中值的长度

-- ROUND 函数用于把数值字段舍入为指定的小数位数
-- column_name	必需。要舍入的字段。decimals	必需。规定要返回的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products

-- NOW() 返回当前日期时间
SELECT NOW() FROM table_name
-- 希望显示当天的日期所对应的名称和价格
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products

-- FORMAT() 格式化显示
SELECT FORMAT(column_name,format) FROM table_name

SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products

HAVING

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

SQL Select语句完整的执行顺序:

1、from子句组装来自不同数据源的数据;

2、where子句基于指定的条件对记录行进行筛选;

3、group by子句将数据划分为多个分组;

4、使用聚集函数进行计算;

5、使用having子句筛选分组;

6、计算所有的表达式;

7、select 的字段;

8、使用order by对结果集进行排序。

SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。SQL查询处理的步骤序号:

1 (8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list>

2 (1) FROM <left_table>

3 (3) <join_type> JOIN <right_table>

4 (2) ON <join_condition>

5 (4) WHERE <where_condition>

6 (5) GROUP BY <group_by_list>

7 (6) WITH {CUBE | ROLLUP}

8 (7) HAVING <having_condition>

9 (10) ORDER BY <order_by_list>

Oracle sql语句执行顺序_Simon188的博客-CSDN博客

posted @ 2022-09-16 11:19  小草今天又在摸鱼吗  阅读(47)  评论(0编辑  收藏  举报