本文只考虑mysql、SQL Server、Oracle
sql对大小写不敏感
可以把sql分为两部分:数据操作语言(DML)和数据定义语言(DDL)
查询和更新指令构成了SQL的DML部分:select-从数据库表中获取数据,update-更新数据库表中的数据,delete-从数据库中删除数据,insert into-像数据库表中插入数据
sql的数据定义语言(DDL)部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的连接,以及施加表之间的约束。:
sql中重要的DDL语句:
create database-创建数据库
alter database-修改数据库
create table-创建新表
alter table-改变数据库表
drop table-删除表
create index-创建索引(搜索键)
drop index-删除索引
如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:SELECT DISTINCT Company FROM Orders
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber(先以Company列为标准进行排列,Company列名称相同的 在以OrderNumber列为标准排列)
以逆字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC(先以Company列为标准进行逆字母顺序排列,Company列名称相同的 在以OrderNumber列为标准进行升序排列)
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
delete语句用于删除表中的行:delete from person where lastName = ‘Wilson’,删除了lastName为Wilson的那一行所有数据
delete from person,删除了person表中的所有数据
更新某一行的一个列:update person set firstName = ‘fred’ where lastName = ‘wlison’
更新某一行的很多列:update person set firstName = ‘sss’,city = 'nanjing' where lastName = ‘alison’
top子句(只对SQL Server中管用)
top子句用于规定返回的记录的数目,对于拥有数千条数据的大型表来说,top非常有用
只对SQL Server中管用:select top 3 * from goods;
select top 50 percent * from goods;(选取表中前百分之五十的数据)
MySQL:slelect * from goods limit 3;
Oracle:select * from goods ROWNUM <= 3;
like子句(“%”可用于定义通配符、模式中缺少的字符)
select * from goods where goods_name like '%ewq%'
select * from goods where goods_name like 'q%'
select * from goods where goods_name like '%e'
select * from goods where goods_name like 'ewq%qwe'
通配符(在搜索数据库中的数据时,sql通配符可以替代一个或多个字符。sql通配符必须与like运算符一起使用。)
a.%通配符,同上
b._通配符
“_”只能代表一个字符,只是替代了一个字符而已,其他位置字符必须一样
select * from goods where goods_name like '_qwqw'
select * from goods where goods_name like 'q_wqw'
c.[charlist]通配符(貌似对mysql不好使)
select * from goods where goods_name like '[ALN]%';(查找商品名称以A、L、N开头的的商品)
select * from goods where goods_name like '[!ALN]%';(查找商品名称不以A、L、N开头的的商品)
in子句(类似等于)
SELECT * FROM goods WHERE category_id IN (9999904,849) AND goods_name IN ('124','西红柿','青岛啤酒');
类似于
SELECT * FROM goods WHERE id = 1560 OR id = 1564;
between子句(操作符BETWEEN...AND会选取介于两个值之间的数据范围,这些值可以是数值、文本、日期,mysql中的between左右都包括)
SELECT * FROM goods WHERE goods_name BETWEEN '西红柿' AND '青岛啤酒';
SELECT * FROM goods WHERE category_id BETWEEN 99999909 AND 99999911;
having子句
在SQL中增加HAVING子句的原因是,where关键字无法与合计函数一起使用。
select customer,sum(orderPrice) from orders group by customer having sum(orderPrice)< 2000
select customer,sum(orderPrice) from orders where customer='bush' or customer='admin' group by customer having sum(orderprice)>1500
视图view:
视图就像是一个可视化的表
什么是视图:在sql中,视图是基于sql语句的结果集的可视化的表。
视图可以包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库的真实的表中的字段。我们可以向视图添加sql函数、where、join语句,我们也可以提交数据,就像这些来自于某个单一的表。
create view view_name as select column_name(s) from table_name where condition
视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用sql语句来重建数据。
创建视图
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
查看视图
SELECT * FROM [Current Product List]