建立数据库(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')
SQL常用基本语句
最新推荐文章于 2024-08-16 09:32:33 发布