SQL常用语句总结

时间:2021-01-25 01:02:03

 

 

  


 

1: SQL Select 语句

distinct: 关键字是查询字段不同的结果集 . select distinct LanType,SongName from TableSong

  distinct 作用于后面跟接的字段,并非只作用于第一个字段。
  eg: 当想要查询LanType 不同的结果集,同时需要Songname 字段时怎么写 ???

limit : select distinct LanType,SongName from TableSong limit 5 返回结果集前5行
limit - offset : select * from TableSong limit 4 offset 5 limit4: 输出4行结果 offset:(从第6行处开始输出)
order by : 必须保证order by 是select 语句的最后一个子语句(否则报错)
   order by 可以跟接多字段排序
  desc (倒叙排列)
  asc (升序排列 默认效果)
  desc,asc 只作用于位于他前面的列,如果想作用于多列可写
  select * from TableSong order by SongName desc ,SongIndex desc
where: SQL 过滤 应当在服务端进行过滤,在应用端过滤,需要服务端发送所有数据,导致网络宽带浪费   = :等于   <> : 不等于   = : 不等于
  < :小于
  <= :小于等于
  > : 大于
  >= : 大于等于
  !> : 不大于
  between and :指定两个值之间(包含这俩值)
  is null: 为null 值
  where songName= ‘songname’ 需要单引号包裹

And :
  操作符 跟where 语句附近条件
  eg: select * from TableSong where SongIndex between 10005 and 10010 and SubFileType=4

Or :
  操作符: 满足其一条件即可
 eg: 查询SongIndex >10010的 Lantype =4 或Lantype=20 的数据

And or 连用:

   select * from TableSong where LanType=4 or LanType=20 and SongIndex >10010
  上面该语句查询的结果是 select * from TableSong where LanType=4 or ( LanType=20 and SongIndex >10010 )
  原因是: and 在求集 过程中优先级 高
  select * from TableSong where (LanType=4 or LanType=20) and SongIndex >10010


in :操作符合
  eg: select * from TableSong where LanType in(3,20)
  在有很多合法选项时,IN操作符的语法更清楚,更直观。
  在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
  IN操作符一般比一组OR操作符执行得更快
  IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。
  eg: select * from TableSong where LanType in(select distinct LanType from TableSongSinger )


not:
  eg: select * from TableSong where NOT LanType=4
  not用来否定(排除)后面的判断条件
  eg: not in
  select * from TableSong where LanType not in(select distinct LanType from TableSongSinger )

like 通配符:

   eg: select * from TableSong where SongName like '%a%'
   % : 在搜索串中,%表示任何字符出现任意次数
   _(下划线): 在搜索串中, _ 表示任何字符出现一次
   [] : 方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
   eg: where cust_contact like '[jm]%' cust_contact 以 j或m开头
   [^ ] 用来否定:

字段拼接 :

  Access和SQL Server使用 + 号
  DB2、Oracle、PostgreSQL、SQLite和OpenOffice Base使用||
  eg: select SongName||SongIndex as Address from TableSong (将SongName,SongIndex拼接在一起,组成新的字段Address)


TRIM 函数:

  大多数DBMS都支持RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)。
  select SongName||'( ' || trim(SongIndex) || ' )' as address from TableSong

操作符 + - * /:

eg: select SubFileType,LanType ,SubFileType*LanType as num from TableSong

函数使用:

  upper() : 转换值为大写 eg: select upper(SongName) from TableSong
  left() : (或使用子字符串函数) 返回字符串左边的字符
  LENGTH(): (也使用DATALENGTH()或LEN()) 返回字符串的长度
  LOWER():(Access使用LCASE()) 将字符串转换为小写
  LTRIM() :去掉字符串左边的空格
  RIGHT(): (或使用子字符串函数) 返回字符串右边的字符
  RTRIM() 去掉字符串右边的空格
  SOUNDEX() 返回字符串的SOUNDEX值
  UPPER()(Access使用UCASE()) 将字符串转换为大写
  ABS() 返回一个数的绝对值
  COS() 返回一个角度的余弦
   EXP() 返回一个数的指数值
  PI() 返回圆周率
  SIN() 返回一个角度的正弦
  SQRT() 返回一个数的平方根
  TAN() 返回一个角度的正切

聚集函数:

  avg(LanType): 返回某一列的平均值
  count() : 返回行数
   select count(*) from TableSong where SongIndex>11000
   max(): 返回某一列的最大值,需要指定列名
  min():
  sum():返回指定列的总和

group by:

  分组
  eg: select count(*) as num, LanType from TableSong group by LanType
  having(): 用来过滤分组
  eg: select count(*) as num, LanType from TableSong group by LanType having count(*)>4



联结:

自联结:
  eg:
   select c1.SongIndex, c1.LanType,c1.SongName
  from TableSong as c1,TableSong as c2
  where (c1.LanType=c2.LanType) and c2.[SongName]='Okean'

组合查询:

  UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
  UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。
  列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含转换的类型、


2:SQL Insert 语句

插入完整的行数据:

  eg: insert into HotSong values('2','2','2')
  该insert 语句很简单,但是数据插入依赖表中字段的次序。

  insert into HotSong (SongIndex,Score,Hots) values('4','6','8')
  将表中字段明确给出,values和其对应即可。


   insert into HotSong (SongIndex,Score,Hots) values('4','6','8')
  eg: 如果列定义为允许NULL值(无值或空值)
  在表定义中给出默认值。这表示如果不给出值,将使用默认值可以省略行

insert select:

  INSERT一般用来给表插入具有指定列值的行。
  INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,
  这就是所谓的INSERT SELECT。顾名思义,它是由一条INSERT语句和一条SELECT语句组成的。
  eg: insert into TableSong(LanType) select LanType from TableSong where SongIndex=1558

3:SQL delete 语句

  delete from tableName where
  如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快


4 SQL create

create Table testTable (
name char(10) not null,
sex char(10) not null,
age char(10) not null
);

  create Table if not exists testTable2 (
  id integer primary key autoincrement,
  name char(10) not null,
  sex char(10) not null,
  age char(10) not null
   );

删除表(不是删除表数据):

  DROP TABLE testTable;

创建view:

  create view TestTable1 as
  select TableSinger.[SingerIndex],TableSong.[SingerName],TableSong.SongName
  from TableSong left join TableSinger
  on TableSinger.[SingerName]=TableSong.SingerName