SQL常用基本语句

建立数据库(Create Table) 
1、建资料表: 
create table table_name(column1_name data_type [DEFAULT data_value] 
[null | not null [,...] ) 
说明:table_type 数据表这数据表包含一个或多个指定数据型态的字段 
DEFAULT 指定字段初始值data_value 
null表示是否允许数据的值为null当指定字段not null时,数据库系统将 
拒绝新增 null 数据至该字段 
例 Create TABLE customer(First_Name char(50),Last_Name char(50), 
Address char(50),City char(50),Country char(25),Birth_Date date) 
2、更改数据表 
alter table table_name add column column_name datatype 
说明:增加一个字段(没有删除某个字段的语法。) 
lter table table_name add primary key (column_name) 
说明:更改表得的定义把某个字段设为主键。 
alter table table_name drop primary key (column_name) 
说明:把主键的定义删除。 
3、建立索引 
create UNIQUE index empno_idx on table_name(emp_no) 
说明:对某个表格的字段建立索引以增加查询时的速度。 
4、删除 
drop Table table_name //删除数据表 
drop Table temp //删除temp数据表 
drop Index index_name //删除索引 

数据操作语言 DQL(Data Manipulation Language) 

常用、主要的SQL指令: 
●Select(选取数据,属DQL) 
数据查询 
SELCET * FROM Table //过滤显示所有数据库 
SELCET Name, Tel FROM Table //过滤显示 Name Tel 资料 
SELCET DISTINCT dept_no FROM table_name //DISTINCT 取消重复部份 
SELCET DISTINCT au_lname FROM authors Where au_lname="Ringer" 
SELCET full_name, salsry*12 FROM table_name //全名及计算年薪 
SELCET full_name, salsry*12 AS year_salary FROM table_name 
//在ISO 的SQL 语法标准中允许使用AS子句重新命名字段名称 
SELCET * FROM table_name Where column1 = xxx [and column2 > yyy] 
[or column3 <> zzz] 
------------------------------------------------------------------ 
整合性的查询: 
SELCET count (*) FROM table_name Where column_name = xxx 
//查询符合条件的数据共有几笔。 
SELCET SUM(column1) FROM table_name 
说明: 
1.计算出总和,所选的字段必须是可数的数字形态。 
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的 
整合性查询。 
------------------------------------------------------------------ 
组合查询 
组合查询是指所查询得数据来源并不只有单一的表格,而是联合一个以上 
的表格纔能够得到结果的。 
SELCET * FROM table1,table2 Where table1.colum1=table2.column1 
说明: 
1.查询两个表格中其中 column1 值相同的数据。 
2.当然两个表格相互比较的字段,其数据形态必须相同。 
3.一个复杂的查询其动用到的表格可能会很多个。 
------------------------------------------------------------------ 
复合性的查询 
SELCET * FROM table_name1 Where exists ( SELCET * FROM 
table_name2 Where conditions ) 
说明:1.where 的 conditions 可以是另外一个的 query。 
2.exists 在此是指存在与否。 
SELCET * FROM table_name1 Where column1 IN ( SELCET column1 
FROM table_name2 Where conditions ) 
说明:1. in 后面接的是一个集合,表示column1 存在集合里面。 
2. select 出来的数据形态必须符合 column1。 
------------------------------------------------------------------ 
其它查询 
SELCET * FROM table_name1 Where column1 LIKE 'x%' 
//说明:like 必须和后面的'x%' 相呼应表示以 x为开头的字符串。 
SELCET * FROM table_name1 Where column1 IN ('xxx','yyy',..) 
//说明:in 后面接的是一个集合,表示column1 存在集合里面。 
SELCET * FROM table_name1 Where column1 BETWEEN xx AND yy 
//说明:between 表示 column1 的值介于 xx 和 yy 之间。 
SELCET * FROM 程序基本数据 Where 阳上姓名 LIKE "% 徐 %"; 
//过滤不特定"徐"的数据 
SELCET * FROM Table Where Name LIKE "*徐*" 
//过滤特定"徐"之中的数据 
SELCET full_name,hire_dat,phone_exit FROM table_name 
Where lase_name LIKE 'Le#%' ESCAPE '#'; 
//ESCAPE 比对符号要检查lase_name是否内含'Le#% 的字符串 
SELCET full_name,hire_dat,phone_exit FROM table_name 
Where lase_name LIKE 'L%'; 
//lase_name LIKE 'L%' 代表第一个字母须以L字母为开头其余可任意字符串 

//lase_name NOT LIKE 'L%' 代表第一个字母不得为L字母 
//lase_name LIKE 'L%' 代表第一个字母须以L字母为开头其余可任意字符串 
//lase_name LIKE 'L__' 姓氏须三个字符第一个字符为 L 
(底线字符'_'类似Dos下的'?'字符) 
//lase_name LIKE '%ee%'代表任何内含'ee'字符串 
//lase_name LIKE '%e'最后一个字符须为'e' 
------------------------------------------------------------------ 
资料筛选 
资7料单一搜寻 
SELCET full_name, hire_date,phone_exit FROM table_name 
Where dept_no=600 //显示部门代号等于600的所有员工.... 
SELCET full_name,hire_dat,phone_exit FROM table_name 
Where phone_exit IS NULL 
//列出所有没有分机号码的员工姓名(雇员) 
SELCET full_name,hire_dat,phone_exit FROM table_name 
Where phone_exit IS NOT NULL 
//列出所有有分机号码的员工姓名<非NULL值> 
------------------------------------------------------------------ 
数据多重搜寻 
SELCET full_name,phone_exit FROM table_name 
Where phone_exit IS NULL AND hire_date > '20-jan-1992'; 
//未有分机且进入公司(雇员)日期之后员工 
<多资料表连结> 
SELCET full_name, job_country, currency FROM table_name, 
table_name1 Where job_country = table_name1 
SELCET full_name, job_country, currency FROM table_name, 
LEFT JOIN country ON job_country = table_name1 
------------------------------------------------------------------ 
搜寻数据范围 
SELCET full_name,salary FROM table_name 
Where salary BETWEEN 100000 AND 200000; 
//列出薪资在100000至200000的员工 
SELCET full_name,salary FROM table_name 
Where salary >= 100000 AND salary <= 200000; 
//比较运算的查询语言 
SELCET full_name,job_country FROM table_name//集合成员运算(IN子句) 
Where job_country IN('Italy France')//意大利及法国员工 
------------------------------------------------------------------ 
数据排序结果 
单一排序数据 
SELCET full_name,salary,dept_no FROM table_name orDER BY dept_no 
//依各部门代号顺序列出员工姓名及薪资 
SELCET column1,column2 FROM table_name order by column2 [desc] 
//说明:order by 是指定以某个字段做排序,[desc]是指从大到小排列, 
若没有指明,则是从小到大排列 
SELCET * FROM Table order By Age Desc; 
//以年龄栏反排序 
多栏排序数据 
SELCET full_name,salary,dept_no FROM table_name orDER BY 
dept_no, salary DESC; 
//部门代号由小而大,薪资由大而小输出所有员工姓名 
------------------------------------------------------------------ 
SQL合计函数(aggregate function) 
AVG :平均值 
COUNT:笔数 
MIN :最小值 
MAX :最大值 
SUM :加总值 
Select dept_no COUNT(salary)FROM table_name //错误的 
Select dept_no MAX(salary)FROM table_name //错误的 
Select dept_no MAX(salary)FROM table_name GROUP BY dept_no//正确的 
< COUNT 的应用 > 
Select COUNT(*)FROM table_name Where dept_no = 100 
//合计代号100的部门中有几位员工 
< COUNT(DISTINCT) 的应用 > 
Select COUNT(DISTINCT dept_no) FROM table_name 
//公司共有几个部门 
< COUNT及SUM 的应用 > 
Select COUNT(*),SUM(salsry) FROM table_name Where dept_no = 100 
//部门代号为100的员工人数及薪资总数 
< MIN,MAX,AVG 的应用 > 
Select MIN(salsry),MAX(salsry),AVG(salsry)FROM table_name 
Where dept_no = 100 
//部门代号为100的员工的最低薪资和最高薪资及平均薪资 
< GROUP BY子句应用 > 
Select COUNT(*),MIN(salsry),MAX(salsry),SUM(salsry) 
FROM table_name GROUP BY dept_no 
//找出所有部门的人数最低薪资 最高薪资 薪资总数 
< HAVING子句应用 > 
Select COUNT(*),MIN(salsry),MAX(salsry),SUM(salsry) 
FROM table_name GROUP BY dept_no HAVING COUNT(dept_no)>2 
//找出所有部门的人数大于2个人的最低薪资 最高薪资 薪资总数 
------------------------------------------------------------------ 
●Insert(新增资料,属DML) 
Insert INTO 数据表名称 Values (字段1, 字段2,...); 
Insert INTO table_name VALUES('Taiwan','NTD'); 
Insert INTO table_name(country,currency)VALUES('Taiwan','NTD'); 
//table_name中有country,currency 两个字段 
Insert INTO table_name[(column_list)] Select column_list FROM 
another_table_name...... 
//复制多笔数据至另一数据表 
Insert INTO table_name1 Select * FROM table_name 
//table_name 数据表所有数据加入table_name1中 
Insert INTO Table Values ("陈建中","037-271135","苗市中路","40"); 
Insert INTO table_name(column1,column2,...)values(value1,value2,...) 
说明:1.若没有指定column 系统则会按表格内的字段顺序填入数据。 
2.字段的数据形态和所填入的数据必须吻合。 
3.table_name 也可以是景观 view_name。 
Insert INTO table_name (column1,column2,...) select 
columnx,columny,... from another_table 
说明:也可以经过一个子查询(subquery)把别的表格的数据填入。 

●Update(更新数据,属DML) 
< 允许更新己存在的数据表数据> 
Update table_name SET coumn_name1=data_value1[,coumn_name2 
=data_value2,.........] Where search_condition] 
//table_name 须为数据表或可更新的view名称 
//SET 欲更新字段名称 
//Where 子句用指定更条件(可省略)Where 子句中search_condition 
条件符合会更新数据;更新的字段值须以字段所定义的数据型庇兼容 
< 更新所有数据> 
Update table_name SET salary =salary*1.05; 
//员工薪资依物价上涨年增率5%调整 
< 更新指定数据> 
Update table_name SET salary =salary*1.1 Where dept_no=100; 
//所有部门代号100的员工薪资调升 1.1 
< 更新多个字段> 
Update table_name SET job_grade=1 =salary= 11000 Where emp_no=2; 
//编号2号员工职级2级晋升为1级 ,薪资并调升110000 
Update table_name SET column1='xxx' Where conditoins 
说明: 
1.更改某个字段设定其值为'xxx'。 
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个 
字段都会全部被更改。 
●Delete(删除数据,属DML) 
< 删除指定的数据> 
Delete FROM table_name Where dept_no=621; 
//部门代号621被裁撤 
< 删除所有的数据> 
Delete FROM table_name 
Delete * FROM table_name//错误的 
Delete FROM table_name Where conditions 
说明:删除符合条件的资料。 
说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的 
表达式。具体如下: 
(1)如果是access数据库,则为:where mydate>#2000-01-01# 
(2)如果是Oracle数据库,则为:where mydate>cast('2000-01-01' 
as date) 或:where mydate>to_date('2000-01-01','yyyy-mm-dd') 
在Delphi中写成: 
thedate='2000-01-01'; 
query1.sql.add('select * from abc where 
mydate>cast('+'+thedate+'+' as date)'); 
如果比较日期时间型,则为: 
query1.sql.add('select * from abc 
where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd 
hh24:mi:ss') 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值