select name,sal*12 annual_sal 
from emp;
显示的时候会变成annual_sal,若要保持原来的形式可加双引号。
 
标准:sql关键字使用大写,列名和表名使用小写
 
检索
select 列名from 表名
select * from 表名
select distinct 列名 from 表名     只返回不同(具有唯一性)的行
 
select 列名 from 表名
limit 5;         【指示mysql返回不超过5行的数据】
limit 5 offset 5;  【从第5行起的5行数据】
 
注释
行内注释
【1】   selectprod_name  --这是一条行内注释
from products;
【2】   #这是一条行内注释
select prod_name 
from products;
 
排序
select 列名 
from 表名
order by 列名
注【order by 应该是select语句中最后一条字句,否则会出现错误信息】
 
指定排序方向
asc  升序
desc 降序
 
过滤数据where
select prod_name, prod_price
from products
where prod_price =3.49
 
 

 
高级过滤数据
操作符:用来联结或改变where字句中的字句的关键字,也称为逻辑操作符
 
操作符
AND
        Select prod_id, prod_price, prod_name
        From products
        Where vend_id = ‘DLL01’ AND prod_price<= 4;
OR
        Select prod_name, prod_price
        From products
        Where vend_id = ‘DLL01’ OR vend_id = ‘BRS01’;
IN : IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
   IN取一组有逗号分隔,括在圆括号中的合法值。
        
        Select prod_name, prod_price
        From products
        Where vend_id IN (‘DLL01’, ‘BRS01’)
        Order by prod_name;
NOT : where字句中的NOT操作符有且只有一个功能,
那就是否定其后所跟的任何条件。
        Select prod_name
        From Products
        Where NOT vend_id  =  ‘DLL01’
        Order by prod_name;
 
用通配符进行过滤
LIKE操作符
1.     百分号%通配符
Select prod_id, prod_name
From products
Where prod_name  LIKE  ‘Fish%’;  --检索任意以Fish开头的字符。
2.     Whereprod_name  LIKE  ‘%bean bag%’; 
表示匹配任何位置上包含文本bean bag的值。  
3.     Whereprod_name  LIKE  ‘F%y’;
表示以F开头y结尾的字符。
4.     Whereprod_name LIKE ‘%’;
可以匹配任何东西,除了NULL。
 
下划线 _  :只匹配单个字符,而不是多个字符
Select prod_id, prod_name
From products
Where prod_name  LIKE  ‘_Fish’;   --aFish等字符
 
方括号 [] 通配符
用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
例如:找出所有名字以J或M起头的联系人。
Select name 
From customers
Where name LIKE ‘[JM]%’
Order bycust_contact;
 
输出:
name 
-----------------------
Jim Jones
John Smith
Michelle Green
 
匹配不以J或M起头的任意联系人名
Where name LIKE ‘[^JM]%’
 
 
拼接字段
将值联结到一起(将一个值附加到另一个值)构成单个值。
Select  Concat(vend_name,  ‘ (‘, vend_country,  ‘) ‘ )
From vendors
Order byvend_name;
分析:
上面的语句拼接以下元素:
存储在vend_name列中的名字
包含一个空格和一个左圆括号的字符串
存储在vend_ country列中的国家。
包含一个右圆括号的字符串
 

 
使用数据处理函数
1.     文本处理函数
UPPER() : 将字符串转换为大写
LOWER() : 将字符串转换为小写
LTRIM() : 去掉字符串左边的空格
RTRIM() :去掉字符串右边的空格
例:select vend_name, UPPER(vend_name) ASvend_name_upcase
        From vendors
        Order by vend_name;
 
2.     日期和时间处理函数
Oracle中
to_char()函数用来提取日期的成分
to_number()用来将提取的成分转化为数值
to_date()函数将字符串转化为日期
例:
select order_num
From orders
Whereto_number(to_char(order_date,’YYYY’)) = 2012;
 
Select order_num
From orders
Where order_date between to_date(’01-01-2012’)
And to_date(’12-31-2012’);
 
Mysql中
YEAR()函数用来提取年份
Where YEAR(order_date)  = 2012;
 
3.     数值处理函数
数值处理函数仅处理数值函数
ABS()绝对值
COS()余弦
SIN()正弦
TAN()正切
SQRT()平方根
PI()圆周率
EXP()返回一个数的指数值
汇总数据
1.     聚集函数 :对某些行 运行的函数,计算并返回一个值。
COUNT()  : 返回某列的行数
MAX()    : 返回某列的最大值
 MIN()    : 返回某列的最小值AVG()    : 返回某列的平均值
SUM()    : 返回某列值之和
 
AVG() 
Select AVG(prod_price)as avg_price
From products;
 
COUNT
1.     COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
2.     COUNT(column)对特定列中的具有的值进行计数,忽略NULL值
Select COUNT(cust_email) asnum_cust
From customers;
 
输出:
 
num_cust
 
3
 
这条select语句使用COUNT(cust_email)对cust_mail列中有值的行进行计数。
 
聚集不同值
1.     对所有的行执行计算,指定ALL参数或不指定参数
2.     值包含不同的值,指定distinct参数
 
Select AVG(DISTINCT prod_price) asavg_price   --一样的价格只取一个
From products
Where vend_id = ‘DLL01’;
 
 
 
分组数据
Select vend_id,COUNT(*) as num_prods
From products
Where prod_price>= 4
Group byvend_id;        --创建分组
Having COUNT(*)>= 2;     --过滤分组
 

 
联结表
联结:在数据查询的执行中联结(join)表
 
内联结
等值联结是基于两个表之间的相等测试。这种联结也称为内联结。
Select vend_name,prod_name, prod_price
From vendors INNERJOIN products
ON vendors.vend_id= products.vend_id;
 
等效于
Select vend_name,prod_name, prod_price
From vendors ,products
Where vendors.vend_id= products.vend_id;
 
 
创建高级联结
使用表别名
Selectcust_name,cust_contact
From customers asc, orders as o, orderitems as oi
Where c.cust_id =o.cust_id
And oi.order_num =o.order_num
And prod_id = ‘RGAN01’;
 
使用不同类型的联结
1.内联结(等值联结)
2.自联结
3.自然联结
4.外联结
插入数据
Insert into table(列名1,列名2,…) values(v1,v2,…);
 
从一个表复制到另外一个表
Create tableCustCopy As
Select * fromCustomers;    --任意筛选数据都行
 
更新和删除数据
2中使用update的方式:
1.     更新表中的特定行
2.     更新表中的所有行
 
基本的update语句由3部分组成,
分别是:要更新的表、列名和它们的新值、确定要更新哪些行的过滤条件
Update customers
Setcust_email = ‘xx@qq.com’
Where cust_id = ‘100000005’;
 
删除数据
Delete from customers
Where cust_id = ‘100000006’;
 
创建表
 
CREATE TABLEPersons
(
Id_P int NOT NULL,
LastNamevarchar(255) NOT NULL,
FirstNamevarchar(255),
Addressvarchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
 


ALTER TABLE语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
SQL ALTER TABLE 语法
如需在表中添加列,请使用下列语法:
 
ALTER TABLEtable_name
ADD column_namedatatype
 
要删除表中的列,请使用下列语法:
 
ALTER TABLEtable_name 
DROP COLUMNcolumn_name
 

 
使用视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
使用视图的原因:
1.     重用SQL语句。
2.     简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本的查询细节。
3.     使用表的一部分而不是整个表
4.     保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限。
5.     更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
 
创建视图CREATE VIEW
CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact,prod_id
FROM Customers,Orders,OrderItems
WHERECustomers.cust_id = Orders.cust_id
ANDOrderItems.order_num = Oders.order_num;
 
使用存储过程
存储过程: 为以后使用而保存的一条或多条SQL语句。
 
事务处理
使用事务处理,通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。
事务(transaction)  : 指一组SQl语句
回退(rollback): 指撤销指定SQL语句的过程
提交(commit): 指将未存储的SQL语句结果写入数据库表
保留点(savepoint): 指事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同)。
 

 
使用游标
1.     游标
游标cursor是一个存储在DBMS服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
DECLARE CustCursor CURSOR
FOR
SELECT * FROMCustomers
WHERE cust_emailIS NULL;
 
 
约束(constraint): 管理如何插入或处理数据库数据的规则。
1.     主键
主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永不改动。即表中的一列的值唯一标识表中的每一行。
 
添加主键
ALTER TABLEVendors
ADD CONSTRAINTPRIMARY KEY (vend_id);
 
2.     外键
外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的及其重要部分。
 
添加外键
ALTER TABLE Orders
ADD CONSTRAINT
FOREIGN KEY(cust_id)  REFERENCES  Customers (cust_id);
 
3.     唯一约束UNIQUE
4.     检查约束
检查约束在数据类型内又做了进一步的限制,可以确保插入数据库的数据正是你想要的数据。
ADD CONSTRAINTCHECK (gender LIKE ‘[MF]’);
 

 
索引
用来排序数据以加快搜索的排序操作的速度。
在一个或多个列上定义索引,使DBMS保存其内容的一个排过序的列表。
 
创建索引
CREATE INDEXprod_name_ind
ON Products(prod_name);
创建一个叫prod_name_ind的索引在表Products的prod_name列上。
 
 
触发器
触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。
触发器可以与特定表上的INSERT、UPDATE、DELETE操作(或组合)相关联。
触发器与单个表相关联。
 
例(SQL Server)
Create triggercustomer_state
On customers
For insert, update
As
Update customers
Setcust_state  =  upper(cust_state)
Wherecustomers.cust_id = inserted.cust_id;