常见sql语句总结

Posted agnesflower

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见sql语句总结相关的知识,希望对你有一定的参考价值。

创建表:
CREATE TABLE T_Person(FName VARCHAR(20),FAge NUMBER(10) DEFAULT ‘20‘,FId INT NOT NULL,PRIMARY KEY(‘FId‘))
CREATE TABLE T_Employee(EName VARCHAR(20),EId INT NOT NULL,PRIMARY KEY(‘EId‘),FOREIGN KEY(EName) REFERENCES T_Person(FName))
修改数据表:
ALTER TABLE T_Person ADD FFavorite VARCHAR(20) NOT NULL
ALTER TABLE T_Person DROP  COLUMN FAge
alter table T1 alter column F1 varchar(10)或
alter table T1 modify  F1 varchar2(40);
删除表:
DROP TABLE T_Employee
数据的增删改查:
INSERT INTO T_Person(FName,FAge) VALUES(‘TOM‘,18)
INSERT INTO T_Person VALUES(‘POLLY‘,20)

UPDATE T_Person SET FAge=21
UPDATE T_Person SET FAge=21,FName=‘Bob‘
UPDATE T_Person SET FAge=20 WHERE FName=‘TOM‘

DELETE FROM T_Person
DELETE FROM T_Person WHERE FAge > 20 or FName = ‘Mars‘

SELECT FNumber FROM T_Employee
SELECT FNumber AS Number1,FName AS Name,FAge AS Age FROM T_Employee
SELECT FNumber Number1,FName Name,FAge Age FROM T_Employee
SELECT FNumber 编号,FName 姓名,FAge 年龄 FROM T_Employee
聚合函数:MAX(列名) ,AVG(列名),SUM(列名),MIN(列名),COUNT(列名)
SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25
SELECT AVG(FAge) FROM  T_Employee WHERE FSalary>3800
SELECT SUM(FSalary) FROM T_Employee
SELECT MIN(FSalary),MAX(FSalary) FROM T_Employee
SELECT COUNT(*),COUNT(FNumber) FROM T_Employee
聚合函数复杂使用方法:
按照条件分组:
SELECT COUNT(*),t.emplno FROM T_Employee t group by t.emplno
排序:
SELECT COUNT(*),t.emplno FROM T_Employee t group by t.emplno order by t.FNumber DESC
简单排序:
SELECT * FROM  T_Employee  ORDER BY FAge ASC
SELECT * FROM  T_Employee  ORDER BY FAge DESC
SELECT * FROM T_Employee  WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC

IS NULL 和 IS NOT NULL
SELECT * FROM T_Employee  WHERE FNAME IS NULL
SELECT * FROM T_Employee  WHERE FNAME IS NOT NULL AND FSalary <5000

SELECT * FROM T_Employee  WHERE FAge!=22 AND FSALARY!<2000
SELECT * FROM T_Employee  WHERE FAge<>22 AND FSALARY>=2000

IN,OR,BETWEEN AND
SELECT FAge,FNumber,FName FROM T_Employee  WHERE FAge=23 OR FAge25 OR FAge=28
SELECT FAge,FNumber,FName FROM T_Employee  WHERE FAge IN (23,25,28)
SELECT * FROM T_Employee WHERE FAGE>=2AND FAGE <=27
SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27

LIKE模糊查询,DISTINCT去重
SELECT * FROM T_Employee  WHERE FName LIKE ‘[SJ]%‘
SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge
SELECT FSubCompany,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FSubCompany
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVINGCOUNT(*)>1
SELECT DISTINCT FDepartment FROM T_Employee

SUBSTRING
SELECT * FROM T_Employee WHERE FSalary/(FAge-21)>1000
SELECT FName, SUBSTRING(FName,2,3)  FROM T_Employee  WHERE FName IS NOT NULL
SELECT FName,FAge, SIN(FAge) , ABS(SIN(FAge)) FROM T_Employee
SELECT FIdCardNumber,FAge,FName FROM T_TempEmployee
UNION
SELECT FNumber,FName,FAge FROM T_Employee

主从表外键关联
create table zhuTable(
id int primary key,
name varchar(11)
);
create table congTable(
congid int primary key,
tel varchar(10),
zhuid int,
CONSTRAINT FK_ZHUANDCONG foreign key(zhuid) references zhuTable(id)
);

alter table congtable

add constraint fk_student

foreign key(zhuid)

references zhutable(id);
内连接:
select * from student inner join course on student.ID=course.ID
相当于select * from student,course where student.ID=course.ID

完全外连接  full join 或 full outer join

SQL语句:select * from student full join course on student.ID=course.ID

完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)。

左连接  left join 或 left outer join

SQL语句:select * from student left join course on student.ID=course.ID

左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).

注:此时我们不能说结果的行数等于左表数据的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。

右连接  right join 或 right outer join

SQL语句:select * from student right join course on student.ID=course.ID

右外连接包含right join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)。

注:同样此时我们不能说结果的行数等于右表的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。

SQL语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

oracle:

select depr.relationid,depr.tabtype from T_CENTER_DEPRULEPOL depr,
    (SELECT  connect_by_root(t.departmentid) departmentpid FROM T_CENTER_DEPARTMENT t
        where t.departmentid = 623 START WITH t.parentid IS NULL  
        CONNECT BY nocycle prior t.departmentid = t.parentid)dep
        where depr.departmentid = dep.departmentpid;




使用CREATE 语句创建索引

CREATE INDEX index_name ON table_name(column_name,column_name) include(score)

普通索引

CREATE UNIQUE INDEX index_name ON table_name (column_name) ;

非空索引

CREATE PRIMARY KEY INDEX index_name ON table_name (column_name) ;

主键索引
 
使用ALTER TABLE语句创建索引

alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;


删除索引

drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;



创建索引
alter table tbl_name add primary key (column_list):
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为 null。

alter table tbl_name add unique index_name (column_list):
这条语句创建索引的值必须是唯一的(除了 null 外,null 可能会出现多次)。

alter table tbl_name add index index_name (column_list):
添加普通索引,索引值可出现多次。

alter table tbl_name add fulltext index_name (column_list):
该语句指定了索引为 fulltext ,用于全文索引。


删除索引
drop index [indexname] on mytable;


修改
alter mytable add index [indexname] on(username(length))


查询
使用 show index 命令来列出表中的相关的索引信息。可以通过添加 g 来格式化输出信息。
show index from table_name g

1、Create table创建数据表:
  建立了T_Customer,T_Order,T_Ordertype三个表,基本语法是:Create table+表名+(每列约束条件,表的约束条件),表名要求是:必须以字母开头、1-30个字符长度、只允许包含A-Z, a-z, 0-9, _, $, and #、在一个数据库保证命名的唯一、不能使用Oracle内部的关键字。

2、Insert插入数据:
  基本语法:insert into (列名) +values (插入内容),列名可以不与表中顺序一致,但要与插入内容一一对应,在此对上文创建的三个数据表插入内容

3、Nvl空值函数:
  基本语法:NVL(表达式1,表达式2)如果表达式1为空,返回值为表达式2的值,否则返回表达式1的值,该函数的目的是把一个空值转换成一个实际的值。表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。在表T_order中的Customerid列中存在一个空值,将它转换成一个实际的值

4、Distinct去掉重复行:
  基本语法:Select distinct+列名 from 表名,去掉表中某列的重复行

5、as(可省略)使用列别名:
  基本语法:Select 列名 as(可省) 列别名 from 表名,在此因为有三个不同的数据表,里面的列名是可以重复,在查询过程中,重复的列名会报错“未明确定义列”

6、Between…and…用法:
  在条件查询语句中时常会使用between…and…统计区间内的值,在此查找T_customer表中年龄在20到29岁的客户资料:select * from T_customer where age between 20 and 29;

7、In(范围)用法:
  在条件查询语句中会用到in(范围)来查找一个范围中的值,如在此查找T_order中Fid为“1、3、5”的客户姓名:
select t.name from T_order t where t.Fid in (1,3,5);

8、Like的模糊查询:
  在条件查询语句中:遇到数据库中数据过长,查询时很不方便,使用模糊查询不但能够查找到记不太清的数据信息,也可以快捷的查找到长文字的数据信息,在此在T_order中查询订单号开头是T,结尾是1,姓名开头是T的客户信息,此处运用了“%”与“_”两个通配符
select * from T_order t where t.orderid like %T__1% and t.name like %T%;

总结模糊查询中使用的通配符:
  (1)“%”表示任意个字符,当想表达中文时,用“%%”来表示;

  (2)“_”表示任意单个字符,起限制作用

  (3)“[ ]”表示括号内其中一个字符,表示符合括号范围内;

  (4)“[^ ]”与“[ ]”类似,表示不在括号内的内容是选择的区间;

  (5)当在模糊查询中,如遇到查询内容包含通配符时,把特殊符号用“[ ]”括起来,便可以正常查询

9、聚合函数:
  在查询过程中会涉及对数据的计算、统计,这时候我们常用的聚合函数有:

  AVG (DISTINCT|ALL|n)

  COUNT (DISTINCT|ALL|expr|*)

  MAX (DISTINCT|ALL|expr)

  MIN (DISTINCT|ALL|expr)

  SUM (DISTINCT|ALL|n

  基本语法:select 聚合函数 from 表
select AVG (price),MAX (price), MIN (price),SUM (price) from T_order;



SELECT * FROM T_CORP t where t.CORPCODE in (‘orgorg‘,‘yttPlus‘);
SELECT distinct  t.CORPCODE FROM T_CORP t where t.CORPCODE like ‘%o__g%‘;
select max(INTERDISCOUNT0) ,min(INTERDISCOUNT0),avg(INTERDISCOUNT0) from  T_CORP t;
 

以上是关于常见sql语句总结的主要内容,如果未能解决你的问题,请参考以下文章

sql优化总结

常见sql语句及复杂sql语句记录

sql server sql语句常见错误

sql 中常见的控制流语句

SQL语句常见优化十大案例

SQL语句小总结