数据库基础(常用SQL语句)

一、数据库级及SQL语言简介

1、目前主流数据库

微软:sql server、access

瑞典:mysql

ibm: db2

sybase:sybase

ibm: informix

oracle: oracle

2、SQL语言

DQL-------------数据查询语言

select … From … Where

DML-------------数据操纵语言

insert、update、delete

DDL-------------数据定义语言

create、alter、drop

DCL-------------数据控制语言

commit、rollback、savepoint

二、数据库的数据类型(MySQL)

1、字符类型:

char类型:固定长度的内容,效率高。存储空间范围(1-2000)字节。

varchar类型:动态长度的字符类型,存储空间范围(1-4000)字节。

long类型:存储2G的文件大小。

2、数值数字类型:

3、日期类型:

三、基本Sql语句

1、表设计

创建表:

create table 表名 (字段 字段类型);

复制表结构及数据:

create table 新表 as select * from 旧表

复制表结构不需要数据:

create table 新表 as select * from 旧表 where 2<>2

查看表结构:desc 表名.

复制表数据:

insert into 目标表 select * from 参考表

伪表:系统中保留的虚拟表,不能更改,也不能删除。

名称:dual

通过伪表显示当前系统时间:select sysdate from dual;

查看指定用户下所有的表

SELECT table_name FROM all_tables WHERE owner = upper('用户名');

注意:用户名必须大写

2、操作字段

增加字段:

alter table 表名 add (字段名称 字段类型)

修改字段:

alter table 表名 modify (字段名称 字段类型)

注意:实际上大部分时间我们修改的是字段类型的大小,而不是类型本身,如果非在改成其它类型,则需要满足兼容性。或者把对应这列数据全部清除。

删除字段:

alter table 表名 drop column 字段名称

3、表约束

约束说明

NOT NULL 指定字段不能包含空值

UNIQUE 指定字段的值(或字段组合的值)表中所有的行必须唯一

PRIMARY KEY 表的每行的唯一标识,即主键

FOREIGN KEY 在字段和引用表的一个字段之间建立并且强制外键关系,即外键

CHECK 指定一个必须为真的条件

主键与唯一约束的区别:

1.主键只能有一个,而唯一约束可以有多个;

2.主键可以由一列或多列充当,但唯一约束只能一列一列创建;

3.主键不允许为空,而唯一约束在Oracle中可以多次为空,在SQL中唯一约束只能一次为空;

NOT NULL:此约束为行级约束,不在能表级约束中定义。

添加约束:

ALTER TABLE 表名 ADD [CONSTRAINT 约束标识名称] 约束类型(字段名称);

例:ALTER TABLE stu ADD CONSTRAINT stuid_pk PRIMARY KEY(stuid);

删除约束:

ALTER TABLE table

DROP PRIMARY KEY | UNIQUE(字段名) | CONSTRAINT 约束名 [CASCADE]

例:ALTER TABLE stu DROP PRIMARY KEY;

-----------------------------------------------------------------

示例一:【创建表的同时指定约束】

create table 表(

字段 字段类型 CONSTRAINT 约束标识名称 约束类型;

);

示例二:【先创建表,后创建约束】

ALTER TABLE 表名 ADD CONSTRAINT 约束标识名称 约束类型(字段);

外键约束的创建:

alter table table_name add constraint cid_fk foreign key(cid) references classes(cid) 【on delete cascade】

(主-从)建表规则:

1.先create父表(要有pk或uk),再create子表(FK)

2.先insert父表,然后insert子表。

3.先delete子表,在delete父表。

4.先drop子表,在drop父表。

父表先于子表存在,子表比父表先消亡。

--------------------------------------------------------------

4、表查询

基本查询

语法格式:

select [列名],... from 表名

条件查询(where)

语法格式:

select [列名],... from 表名 where 条件

逻辑运算

操作符包括如下几种:

1、算术操作符:算术操作符包括加(+)、减(-)、乘(*)、除(/)

2、比较操作符:比较操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等

3、逻辑操作符:逻辑操作符包括与(AND)、或(OR)和非(NOT)。

4、集合操作符:集合操作符包括冻并集(UNION)、交集(INTERSECT)、剪集(MINUS)

5、连接操作符:|| 例:SELECT ename || ' is a ' || job FROM emp;

集合操作符:多用于数据量比较大的数据局库,运行速度快。

1). union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。

SELECT ename, sal, job FROM emp WHERE sal >3000

UNION

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';


2).union all

该操作符与union 相似,但是它不会取消重复行,而且不会排序。

SELECT ename, sal, job FROM emp WHERE sal >2500

UNION ALL

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';


3). intersect

使用该操作符用于取得两个结果集的交集。

SELECT ename, sal, job FROM emp WHERE sal >2500

INTERSECT

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';


4). minus

使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不

存在第二个集合中的数据。

SELECT ename, sal, job FROM emp WHERE sal >2500

MINUS

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';

(MINUS 就是减法的意思)


注意: 集合运算中各个集合必须有相同的列数,且类型一致,集合运算的结

果将采用第一个集合的表头作为最终的表头,order by

必须放在每个集合后

排序

语法格式:

select [列名],... from 表名 where 条件 order by 字段 (desc | asc)

说明:

DESC:表示按降序排序(即:从大到小排序)

ACS:表示按升序排序(即:从小到大排序)

函数

1、常用的系统函数

1.1 日期函数:

-ADD_MONTHS(d,f):指定时间d,推移f月,得到推移后的时间

d:指定一个时间(需要使用to_date函数转换)

f:在指定时间上推移多少个月

例:在“2010-05-12”时间上推移3个月后的时间

select ADD_MONTHS(to_date('2012-05-12','yyyy-mm-dd'),3) from dual;


-Months_between(d1,d2):显示两个时间相差的月份

d1:第一个时间

d2:第二个时间


注意:必须注意的是,d1与d2都为Date类型,不然会出现错误。

须用to_date('','') 来转换为日期格式,才能参加计算。


例:计算 2012-12-12 与 2012-2-12 相差的月份。

SELECT MONTHS_BETWEEN(to_date('2012-12-12','yyyy-MM-dd'),to_date('2012-2-12','yyyy-MM-dd'))

FROM dual;


-last_day(m):返回特定日期所在月份的最后一天

m:时间


例:计算“2010-10-12”所在月份的最后一天

SELECT last_day(to_date('2010-10-12','yyyy-mm-dd')) FROM dual;


-next_day(x,y)用于计算x时间后第一个星期y的时间。

例子,当前时间是2014-08-15

select next_day(to_date('2014-08-15','yyyy-mm-dd'),'星期二')from dual;

返回的结果是: 2014-08-19


-trunc(date,[fmt]):处理时间

date:一个日期值

fmt :日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去


例:

trunc(sysdate,'yyyy') --返回当年第一天.

trunc(sysdate,'mm') --返回当月第一天.

trunc(sysdate,'d') --返回当前星期的第一天.

trunc(sysdate,'dd')--返回当前年月日

trunc(sysdate, 'hh')--返回当前小时

trunc(sysdate, 'mi')--返回当前分钟


-trunc(number,[decimals]):处理数字

number: 待做截取处理的数值

decimals:指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分

例:

TRUNC(89.985,2)=89.98

TRUNC(89.985)=89

TRUNC(89.985,-1)=80

2、常用的字符函数:

-lower(string):转小写

用法:比如将字符“ABC”转为小写

select lower('ABC') from dual;

结果:abc


-upper:转大写

用法:比如将字符“abc”转为大写

select upper('abc') from dual;

结果:ABC


-length():长度函数

用法:获取字符“abc”的长度

select length('abc') from dual;

结果:3

注:长度是指字符串的长度 如“中国”为2 “ab”也为2

-substr(char,m,n):截取字符串

用法:将字符“abcde”中的“cd”进行截取

select substr('abcde', 3 ,2 ) from dual;

结果:cd


-replace(s1,s2):替换

用法:将字符“abcde”中的“c”替换为“123”;

select replace('abcde', 'c' ,'123' ) from dual;

结果:ab123de


-concat(s1,s2):拼接

用法:将字符“abc”与字符“de”拼接显示

select concat('abc','de') from dual;

结果:abcde

等价于: 'abc'||'de'

lpad( string, padded_length, [ pad_string ] ):指定长度,不够则填充

用法:将字符“abcde”以10个长度显示,左侧用“X”填充

select lpad('abcde',10,'x') from dual;

结果:xxxxxabcde

3、数字函数:

ceil:往上取整,与小数位的大小无关

floor:往下取整,与小数位的大小无关.

mod:取余。求模。

round:四舍五入。

trunc(m,n):


4、 转换函数:

-to_char:日期转化为字符串

例:

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;

select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年

select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月

select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日

select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时

select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分

select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒

select to_char(sysdate,'day') as nowSecond from dual; //获取时间的星期


-to_date:把字符串类型日期转换为date类型日期。

例:

select to_date('2014-02-11','yyyy-mm-dd') from dual


sysdata当前日期

-to_number:把某种类型转换为数字类型。

注意:如果字符类型的内容是数据,则可以实现自动转换为数字类型


5、 其它函数:

-NUL函数:把数字类型为null的值转换为0;

结构:

nvl(字段名称,0);

nvl(comm,0);

转换之后,可以实现算术运算。


-decode函数:

decode(参数一,参数二,参数三,....);

参数一:字段名称

参数二:参数一字段对应的内容。

参数三:把参数一字段对应的内容替换成其它的内容。

示例:select decode(JOB,'CLERK','业务员') from emp;


6、聚合函数:MAX、MIN、SUM、AVG、COUNT

-AVG :返回指定组中的平均值。

-COUNT:返回指定组中项目的数量。

-MAX:返回指定数据的最大值。

-MIN:返回指定数据的最小值。

-SUM:返回指定数据的和,只能用于数字列。

举报
评论 0