SQL操作语句中的注意点,SQL操作语句
一 查询语句
1 distinct关键字消除重复行
当查询的结果数据中出现重复数据时,在查询条件中加上distinct关键字消除重复行; 如:select distinct Sno from SC;2 like匹配的通配符%和_
% :代表任意长度(包括0)的字符串,例如:like'a%b',表示以a开头,以b结尾的任意长度的字符串; _ :代表任意单个字符,注意数据库的字符集为ASCII时一个汉字需要两个_,当字符集为GBK时只需要一个_,例如:like'欧阳__'; 注:当要查询的字符串本身就含有通配符%或_,这时就要用escape<'换码字符'>短语,对通配符进行转义了,例如:select Cno,Ccredit from Course where Cname like 'DB\_Design' escape '\'; escape'\'表示“\”为换行字符,这样匹配串中紧跟在“\”后面的字符“_”不再具有通配符的含义,转义为普通的“_”字符3 涉及空值的查询
当查询某个字段值为空的条件下,字段与字段值之间要用"IS",不能用"="代替,例如: select Sno,Cno from SC where Grade IS NULL;4 有关升序降序
如:select * from Student order by Sdept, Sage desc; 查询结果按所在系的系号(Sdept)升序排列,同一系中的学生按年龄降序排列5 关于聚集函数的一些注意
在聚集函数(如:count() sum() avg() max() min()等)遇到空值时,都跳过空值而只处理非空值。注意:where字句中是不能用聚集函数作为条件表达式的6 group by分组条件中的having短语指定筛选条件
如果group by分组后,还要要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,可以使用having短语指定筛选条件; 如:select Sno from SC group by Sno having count(*) > 3; 这里先用group by字句按Sno进行分组,然后再用聚集函数count 对每一组计数,having短语给出了选择组的条件,只有满足条件的组(即元组个数>3)才会被选出来 注意:where字句作用于基本表或视图,从中选择满足条件的元组。having短语作用于组,从中选择满足条件的组7 关于嵌套查询的注意
嵌套查询是将一个查询块(子查询)嵌套在另一个查询块(父查询)的where字句或having短语的条件中的查询; 需要特别指出的是,子查询的select语句中不能使用order by字句,order by字句只能对最终查询结果排序8 带有exists谓词的子查询
exists代表存在量词。所以带有exists谓词的子查询不返回任何数据,只产生逻辑真‘TRUE’,或逻辑假‘FALSE’。 例如:select Sname from Student where exists (select * from SC where Sno=Student.Sno and Cno='1'); 由exists引出的子查询,其目标列表达式通常用*,因为带exists的子查询只返回真值或假值,给出别名无实际意义9 集合查询
集合操作主要包括并操作UNION,交操作INTERSECT和差操作EXCEPT; union的使用比较多,将多个查询结果合并起来,系统会自动去掉重复元组,如果要保留重复元组则用union all操作符; intersect的使用是获取多个查询结果中相同的结果(即取交集) except的使用是用前一个查询结果减去后一个查询结果(即取差集)二 插入语句
1 插入子查询结果
子查询不仅可以嵌套在select语句中,也可以嵌套在insert语句中,用以生成要插入的批量数据 例如:insert into Dept_age(Sdept, Avg_age) select Sdept, avg(Sage) from Student group by Sdept;三 修改语句
1 修改表中所有数据的值
如:update Student set Sage=Sage+1;四 模式的删除
删除模式语句:drop schema <模式名> <cascade | restrict> 选择cascade(级联),表示在删除模式的同时把该模式中所有的数据库对象全部一起删除 选择restrict(限制),表示如果该模式中定义了下属的数据库对象(如:表,视图等),则拒绝该删除语句的执行。只有当该模式下没有任何下属的对象时才能执行drop schema语句首先说说怎么用SQL语句创建数据库,创建数据库的语句有如下几种:
1. CREATE TABLE(创建新表)
2. CREATE INDEX(增加索引)
3. DROP INDEX(删除索引)
4. CONSTRAINT(约束语句)
5. ALTER TABLE(修改表)
6. DROP TABLE(删除表)
CREATE TABLE语句:
在数据库中生成新表,表中字段的类型能够为:INTEGER(整型)、LONG(长整型)、 SINGLE(单精度浮点数)、DOUBLE(双精度浮点数)、DATETIME(日期型,也能够写成DATE)、BIT(布尔型)、 TEXT(字符串型,最大255个字节)、MEMO(字符串型,最大可达1.2G字节)、 COUNTER(自动递增长整型,可确定记录的唯一性)、CURRENCY(货币型,精确到小数点左边15位,右边4位)、 BINARY(字节型,最大255个)、LONGBINARY(用于OLE对象)、GUID(全局唯一标识符)。
生成表NewTable,该表有文本字段Field1和整型字段Field2,表名和字段名能够随便您取,不区分大小写,但是,有些保留字不能用作表名字段名,比如Number
CREATE TABLE NewTable(Field1 TEXT(30), Field2 INTEGER);
CREATE INDEX语句:
INDEX是为了加快查找记录的速度,或是为了增加字段约束关系而配置的。
创建索引语句执行前表中能够有记录,但存在的记录必须满足该索引语句的约束关系,否则语句不能执行,另外要注意的是在同一个数据库中(而不但仅是在同一个表中),索引名不能相同,否则语句也会失败。
生成字段Field1的索引字段NewIndex,两条语句作用相同
生成后Field1字段能够有相同的值,能够有空值(NULL)
CREATE INDEX NewIndex ON NewTable (Field1);
CREATE INDEX NewIndex ON NewTable (Field1) WITH IGNORE NULL;
生成字段Field1的索引字段NewIndex,注意,每个表里只能有一个主索引(PRIMARY)。生成后Field1字段不能有相同的值,不能有空值(当然,假如是TEXT类型,能够有一个空串,但是空串不是空值)
CREATE INDEX NewIndex ON NewTable(Field1) WITH PRIMARY;
字段Field1不能有相同的值,但能够有空值(两个空值不算相同的值)
CREATE UNIQUE INDEX NewIndex ON NewTable(Field1);
字段Field1能够有相同的值,但不能有空值
CREATE INDEX NewIndex ON NewTable(Field2) WITH DISALLOW NULL
能够在索引语句中加入ASC(升序)或DESC(降序)来控制记录排列顺序假如不使用顺序字,SQL则默认使用ASC顺序
CREATE INDEX NewIndex ON NewTable(Field1 ASC, Field2 DESC);
DROP INDEX语句:
删除表NewTable中的索引NewIndex,语句执行前索引NewIndex必须存在
DROP INDEX NewIndex ON NewTable;
CONSTRAINT语句:
CONSTRAINT子句用于创建数据库完整性的索引,他和INDEX语句作用相同,有些地方能够互相替代......余下全文>>
具体需要整理一下问题思路,用SQL语句计算身份证上的性别和年龄,主要就是使用substring函数取得子字符串,然后根据子字符串去判断性别,以及使用getdate函数获得当前日期,然后计算年龄,^_^