desc 表名称 可以查到表的一些信息
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称 显示表中所有列的信息
SELECT TOP 2 * FROM Persons 显示前两个
SELECT TOP 50 PERCENT * FROM Persons 显示前百分之五十
SELECT * FROM Persons WHERE City (not) LIKE 'N%' 显示以n开头的 加了not则为不以n开头的 like就是模糊查询 where name like ‘%/_%’ escape '/' 这句话的意思是查询一个带_的信息 escape'/'意思是把/变成一个转义字符
WHERE is null 就是查询这一列中是空值的 is not null 是非空
%n 以n结尾的
%n% 含n的
'[ALN]%' 以 "A" 或 "L" 或 "N" 开头的人
'[!ALN]%'
_n 第一个字符之后是n的
IN (value1,value2,...) 在 WHERE 子句中规定多个值
(not)BETWEEN 'Adams' AND 'Carter' 字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人
SELECT DISTINCT 列名称 FROM 表名称 显示表的列中不同的名称的行(如果名称相同则只显示一个)
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
SELECT * FROM Persons WHERE FirstName = 'Bush' (数值不需要引号)
and和or的用法(and可以看为且 or可看为或)
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
顺序
SELECT Company, OrderNumber FROM Orders ORDER BY Company (DESC) 以字母顺序显示 company列的信息 DESC为逆序(从高到低) ASC为顺序(从低到高)
可以多层排序 就是 ORDER BY xxx,xx 就是在第一层排序完成后 如果有相同的 就按第二层的排
增加
ALTER TABLE Persons
ADD Birthday date 在Persons表中 增加新的Birthday列
再用这个改变这一列的数据类型
ALTER TABLE Persons
ALTER COLUMN Birthday year 改为年类型可以存放2位或4位的年份
插入
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
更新替换
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
删除
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE FROM Person WHERE LastName = 'Wilson' (若出现内外键约束则会出现问题!!!!)
删除所有行
DELETE FROM table_name
DELETE * FROM table_name
DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)
DROP DATABASE 删除数据库
TRUNCATE TABLE 表名称 (仅仅删除表格中的数据)
删除列
ALTER TABLE Person DROP COLUMN Birthday 在Person表中删除Birthday列
给表取别名
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John' "Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po" (目前这个没有测试成功)
给列取别名
SELECT LastName AS Family, FirstName AS Name 不加as也可以 如果别名加了“”则完全按双引号中的当别名 是大写就是大写 是小写就是小写
FROM Persons 最终输出时 列的名字会变为别名
join比较重要 不太看得懂 可以去看看
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
和
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
貌似没什么区别 就是把两个表连接起来了
left join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName 会从左表(Orders)中返回所有数据 就算没有匹配的 (匹配到了的当然会返回)
right join相反
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
full join就是两边都会列出来 只是没匹配的地方的有些数据是空的
联合
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA 将这两个表中所选列的数据联合成一个列显示 UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名 UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
将一个表的内容移给另一个表
SELECT (*)LastName,FirstName
INTO Persons_backup
FROM Persons 这里也可以加where和in 将persons表中的 lastname和firstname列数据移给Persons_backup
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P 这样也是成立的
创建数据库
CREATE DATABASE database_nam
CREATE DATABASE my_db 创建一个名字叫my_db的数据库
创建数据库中的表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
) Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符
(integer(size)
int(size)
smallint(size)
tinyint(size) ) 仅容纳整数。在括号内规定数字的最大位数
(decimal(size,d)
numeric(size,d)) 容纳带有小数的数字。 "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数
char(size) 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。
varchar(size) 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。
date(yyyymmdd) 容纳日期
约束 (加约束应该就是在创建表的时候在列后面加约束) 约束可以去b站看看视频更能理解
NOT NULL 约束强制列不接受 NULL 值
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证
UNIQUE 约束唯一标识数据库表中的每条记录
PRIMARY KEY 拥有自动定义的 UNIQUE 约束
下面的 SQL 语句强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
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)
)
如果在表建立之后要增加约束则
ALTER TABLE Persons
ADD UNIQUE (Id_P)
撤销为
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
null参与的运算都是null 就是因为这个 所以有个函数 nvl(name,0) 如果这个值是空值 则会被,后面那个值代替 不是则用自己的值 nvl2(name,a,5) 当name为空的时候转换为5 不为空转换为a
||是连接符 会将两列的数据横向的连接在一起 如 第一列名字||第二列名字 结果 第一列数据第二列数据 也可以 第一列名字||'sadf'||第二列名字 结果 第一列数据||'sadf'||第二列数据
concat(‘xxxx’,‘xx’) 结果 xxxxxx
substr(‘abcdefgh’,2,4) 结果bcde 从第二个开始输出四个字符
lengtf(‘xxxx’) 结果4 计算字符长度
instr(‘abcdefgh’,'b') 结果2 这个字符首次出现的位置
select name,lpad(salary,10‘a’) from emplee lpad(salary,10‘a’)用法 就是把所要输出的内容左对齐并且输出10位 不足的用a补齐 还有rpad 右对齐
trim(‘h’from‘hhhellohworldhh’) 结果 ellohworld 删除 这里只能去除首位的这个字符
replace(‘abcd’,‘b’,‘m’) 结果 amcd 替换所有的b
round(421.2262,2)四舍五入 小数点后两位 round(421.2262)round(421.2262,-2)
421.23 421 400
trunc(421.226,2)是截断 不用四舍五入
241.22
mod(301,300) 1 求余
有日期函数 可以去查 跟日期运算有关
to_char(name,'45654') 就是一直格式转换 把number类型转换为插入类型