SQL 学习笔记

本文详述了SQL在不同数据库系统中的数据类型,包括Text、Number、Date等,并探讨了RDBMS、总计函数、Scalar函数以及SQL中的聚合函数如COUNT、MAX、MIN等。还介绍了JOIN操作和视图的创建,以及对NULL值的处理,是学习SQL数据管理和查询的实用笔记。
摘要由CSDN通过智能技术生成

一. SQL(结构化查询语言) DML和DDL

可以把SQL分为两部分: 1.DML (数据操作语言)和 DDL(数据定义语言)

SQL(结构化查询语言)是用于执行查询的语法,但是SQL语言也包含用于更新,插入,删除记录的语法

查询和更新指令构成了SSQL的DML部分:

  •  SELECT --- 从数据库中获取
  • UPDATE ---更新数据库表中的数据
  • DELETE ---从数据库表中删除数据
  • INSERT INTO ---向数据库中插入数据

SQL的数据定义语言(DDL)部分使我们有能力创建数或删除表格. 我们也可以定义索引(键),规定表之间的连接,以及施加标间的约束.

SQL中最重要的DDL语句

  • CREATE DATABASE ---创建新数据库
  • AKTER DATABASE --修改数据库
  • CREATE TABLE --创建表
  • ALTER TABLE  --变更(改变)表
  • CREATE INDEX  ---创建索引(搜索键)
  • DROP INDEX --删除索引

二. 语句

1.select

eg :  select * from  tableName

2.distinct (筛选唯一)

eg:  select  distinct  ColumnName  from tableName 

3.where(规定筛选标准)

操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
eg: select  * from  tableName

       where  ColumName =  ' 列值 ' 

Tips:  SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,不需要引号。

4.and  /  or

5.order by(对结果集进行排序)

 asc : 顺序

 desc: 倒叙

6.insert into (向表格中插入)

eg : 1. insert into tableName  value ( value 1 ,value 2 ...)  -------insert into Students values('D','Singapore','','','')  

        2. insert into tableName ( columnName1, columnName2, ...)  value  (value1, value2 , ...) 指定要插入数据的列

                                                                  -------------insert into Students(Name,City)values('F','Beiijing')

7.update(修改表中的数据)

语法: update 表名 set 列名 =  ' 新值 ' , 列名2 = ' 新值 ' where 列名 =  ' 某值 ' 

8.delete(删除表中的)

语法 : deletefrom 表名 where 列名 = 值

eg :   delete from Students where Address is null 

9.top(规定要返回的记录的数目

tips: 不是所有的数据库都支持top

语法:  select top  number |  percent columnName  

           from tabmeName

MySql :

       select columnName

       from tableName 

       limit   number

Oracle :

      select columnName

      from tableName

      where rownum <= number

10.like(用于在where子句中搜索列中的指定模式)--模糊查询

语法: selecct columnName 

          from  tableName 

          where columnName  like pattern  -------not like pattern

eg: where columnName like ' %g% '-------包含g

       where columnName like '  g% '  --------以g为开头

       where columnName like ' %g '   --------以g为结尾

      where columnName like ' _g% ' ---------更为模糊的查询 ,不知道前面有什么

11.通配符

SQL 通配符必须与 like  运算符一起使用。

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

eg: select * from tableName                       ------------- [charlist]

      Where ColumnName1 like ' [ ALN] %'-------------从表中选取列名1以A或L或N开头的

12. in(允许我们在where子句中规定多个值)

语法: select columnName

          from  tableName

          where columnName in (value1, value2 , ...)   ----就是在表里找列名中值为啥啥啥的行

13. between(在where子句中使用,作用是选取结余炼制之间的数据范围eg:时间,数值,文本)

语法: select columnName

          from tableName

          where  columnName  betweenvalue1 and value2 ------在value1和value2之间的

          where  columnName  not  between value1 and value2 -----不在value1和value2之间的

Tips: 不同数据库不同 ,有: 包括value1 不包括value2的,还有包括1和2 的 , 还有不包括1 但包括2的 ,所以使用之前要查一下

         sql server 2008 既包含1 又包含 2  (亲测有效)

14. Alianses(Alias 别名 : 可谓列名称和表名称指定别名)

: select columnName from tableName  as  AliasName

: select  columnName as Aliasname   from  tableName

使用别名的作用 : 使用更简单,别名使查询程序更易阅读和书写

eg : 假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po".

       现在,我们希望列出 "John Adams" 的所有定单

       我们可以使用下面的 SELECT 语句:

       select  po. orderId ,  p.LastName, p.FirstName

       from   Person as p , Product_Orders as  po

       where p.lastName = 'Adams'  and p.firstName = 'John'

对比不用alias

       select Product_Orders. orderId ,  Person.LastName, p.FirstName

       from   Person  , Product_Orders 

       where Person.lastName = 'Adams'  and Person.firstName = 'John'

tips: 只是你给他起了个别名 ,本身他的名字并没有变

15.join (用于根据两个或多个表中的列之间的关系,从这些表中查询数据)

join和key

有时为了得到完整的数据,我们需要从两个或多个表中获得数据结果,这时就需要执行jion

数据库中的表可以通过键将彼此联系起来, 主键(primary key) 是一个列,在这个列中的每一行都是唯一的.

在表中 ,每一个主键的值都是唯一的,这样做的目的是在不重复的每个表中的所有数据的情况下,把表间的数据较差捆绑在一起

请看 "Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。

接下来请看 "Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。

请留意,"Id_P" 列把上面的两个表联系了起来。

引用两个表:

我们可以通过引用两个表的方式,从两个表中获取数据:

谁订购了产品,并且他们订购了什么产品?

select  Person.LastName ,  Person.FirstName, Orders.orderNo

from Persons, Orders

where Personss.Id_P = Orders,Id_P

结果集

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

使用Join:

使用关键字Join来从两个表中获取数据

如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:

select Persons.LastName, Persons.FirstName, Orders.OrderNo

from Persons

inner jion Orders   --内连接

on Persons.Id_P = Orders.Id_P 

order by Persons.LastName ----排序

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

Tip: 不同的Sql join 

除了我们在是上面栗子中使用的 inner join (内连接) ,我们还可以使用其他中连接

下面是他们之间的差异:

  • join : 如果表中至少有一个匹配则返回行
  • left join : 即使右表中没有匹配, 也从左表返回所有的行
  • right join  : 即使左表中没有匹配,也从右表返回所有行
  • full join : 只要其中一个表存在匹配,就返回行 
16. inner join(内连接----在表中至少一个匹配时,inner join 关键字返回行)

语法: select columnName

          from  tableName1

          inner join tableName2

          on tableName1.columnName =  tableName2.columnName

注释:inner  join  和 join是相同的

17.left join (左链接 ---- 从左表哪里返回所有的行,即使在右表中没有匹配的行)

语法: select columnName 

         from tableName1

         left join  tableName2

        on tableName1.columnName = tableName2.columnName

注释: 在某些数据库中, left join 称为 left outer join

18.right join(右链接 --- 从右表哪里返回所有的行,即使在做表中没有匹配的行)

语法: select  columnName

          from  tableName1

          right join  tableName2

          on tableName1.columnName =tableName2.columnName

注释: 在有些数据库中 ,  right join 称为 right outer join

19.full join (只要其中某个表存在匹配,full join关键字就会返回行)

语法 : select columnName

          from tableName1

          full join tableName2

          on tableName1.columnName =  tableName2.columnName

注释: 在某些数据库中, full join 称为 full outer join

20.union (不重复例举)和 union all(例举所有)

union: 用户合并两个或多个select语句的结果集

Notice : union内部的select 语句必须拥有相同数量的列, 列也必须拥有相似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值