精华内容
下载资源
问答
  • 数据库sql语句和重要知识点总结
  • 把我在开发时候遇到的一点小知识持续更新在这里~ 1.where条件时常变 where UserID='1' 这里的UserID呢,它的值是经常在变化的,有时候要查2,有时候要查3的,有时候要查全部人!这里定义一个函数传参数的时候,...

     

      把我在开发时候遇到的一点小知识持续更新在这里~

     

    1.where条件时常变

    where UserID='1' 这里的UserID呢,它的值是经常在变化的,有时候要查2,有时候要查3的,有时候要查全部人!这里定义一个函数传参数的时候,查全部人这里需要搞一个if分支判断一下,但是呢,不需要~~好的办法来了

    select * from 表 Where UserID="+UserID+" 

    大概就是这样子,UserID是一个参数,你有需要的时候直接传给我1或者2或者其他数字都OK,但是你不需要这个条件的时候,只需要传给我UserID这个就行了,UserID=UserID会查出所有的数据~

     

    2.联表查询都知道,现在来试试三表查询

     

     Sql = "select * from VehicleRegistration a inner join TB_DictData b on a.VehicleID=b.Name inner join T_ACL_User c on a.UserID=c.ID  where b.Value='" + Value + "'";

    多个inner join on 就ok了

     

    3.出现这样的错误:

    消息 8120,级别 16,状态 1,第 6 行
    选择列表中的列 'a.Value' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

    原因以及解决办法:

    凡是在group by后面出现的字段,必须同时在select后面出现;凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面”,检查sql是否符合上述法则。

    其实这个group by还有一些需要注意的地方,在select后面的如果是 as 某一列存在的话是不需要出现在group by后面的,还有,如果select后面出现聚合函数,例如SUM,count等,则一定要有group by存在 

     

    4.书写sql语句的方法(一个资深的同事建议,写在using语句里面可以自动释放数据库链接)

      public static DataTable SqlConnectionInformation()
            {
                string connstr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;    
                DataTable dt = new DataTable();
                using (SqlConnection conn = new SqlConnection(connstr))
                {
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();   
                    } 
                    string sql = "select * from table";
                    SqlCommand com = new SqlCommand(sql, conn);
                    SqlDataAdapter adapter = new SqlDataAdapter(com);
                    adapter.Fill(dt);  
                }
    
                return dt; 
            
            }

     

     5.要学会使用in啊,我脑残的写了一大串子...

    select * from WEB_ItemInfo i where id in(26933,26934,26935,26936,26937,26938,26939,26940,26941)

    我傻逼的写了9次,然后用union连接了起来

    6.学会使用CTE公用表表达式

    with t as
    (
     select * from ......
    )
    select * from t where .....

      这是简单的CTE,可以写复杂一点,比如想对表的查询结果继续进行操作,那么就多写几个CTE

    with t as(
    select CONVERT(varchar(8), a.ItemDate, 112) as datekey ,left(i.Name,5)as Name,a.ItemValue
    from Web_ItemInfo i inner join AnalysisData a  on i.ID in(26933,26934,26935,26936,26937,26938,26939,26940,26941) and i.ID=a.ItemID
    ),
    t1 as(
    select  convert(varchar(20),'蜀云泉真帅啊') as plantname ,convert(varchar(20),'音乐家')  as divisionname,t.datekey,t.Name,SUM(ItemValue) as data from t where datekey>= dbo.GetUpdateDateKey()
    group by Name,datekey
    ),
    t2 as(
    select convert(varchar(20),'蜀云泉真帅啊') as plantname,convert(varchar(20),'音乐家')  as divisionname,
    convert(varchar(12),replace(date_day,'-','')) as datekey,b.pumpname,
    (isnull(h0,0)+isnull(h1,0)+isnull(h2,0)+isnull(h3,0)+isnull(h4,0)+isnull(h5,0)
    +isnull(h6,0)+isnull(h7,0)+isnull(h8,0)+isnull(h9,0)
    +isnull(h10,0)+isnull(h11,0)+isnull(h12,0)+isnull(h13,0)+isnull(h14,0)
    +isnull(h15,0)+isnull(h16,0)+isnull(h17,0)+isnull(h18,0)+isnull(h19,0)
    +isnull(h20,0)+isnull(h21,0)+isnull(h22,0)+isnull(h23,0))/60 as data
    from web_daydata a inner join web_pumpconfig b on b.scid=a.id
    where date_day>=dbo.GetUpdateDate()
    ),
    t3 as(
        select * from t1 union all select * from t2 
    )
    select e.Equipmentid,11 as PlantID,18 asDivisionID,t3.* from t3 inner join SZWG.dbo.Dim_Equipment e on 11=e.PlantID and 18=e.DivisionID and Name=e.EquipmentName

     

    7.连表查询还可以这样来,不需要写那么多的inner join 

    select * from table1 1,table2 2 .....

    8.pivot和unpivot行转列和列转行

    with t as(
    SELECT P.Date_Month,P.Supplier,P.data
    FROM 
    (
       select Date_Month,sum(d1) as d1, sum(d2) as d2,sum(d3) as d3,sum(d4) as d4,sum(d5) as d5,sum(d6) as d6,sum(d7) as d7,sum(d8) as d8,sum(d9) as d9,sum(d10) as d10,sum(d11) as d11,sum(d12) as d12,sum(d13) as d13,sum(d14) as d14,sum(d15) as d15,sum(d16) as d16,sum(d17) as d17,sum(d18) as d18,sum(d19) as d19,sum(d20) as d20,
    sum(d21) as d21,sum(d22) as d22,sum(d23) as d23,sum(d24) as d24,sum(d25) as d25,sum(d26) as d26,sum(d27) as d27,sum(d28) as d28,sum(d29) as d29,sum(d30) as d30,sum(d31) as d31 from Web_MonthData_FuTianWasteWaterTreatmentPlant  where ID in (40204,40218)  group by Date_Month
    
    )T
    UNPIVOT 
    (
        data FOR Supplier IN
        (d1, d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,
        d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31 )
    ) P
    )
    select replace(Date_Month+RIGHT(replace(supplier,'d','0'),2),'-','') as datekey,'福田水质净化厂' as plantname, 
    '一期' as divisionname,data as ItemValue,'预处理区用电' as 电种类 from t

     9.筛选某列只要数字的(如果=1说明是数字类型,如果=0说明不是数字类型)

    where dbo.isReallyNumeric(b.daydata)=1

     

    10.SSIS抽数据的时候做增量,这个应该不属于sql的知识范畴,暂且写在这里吧

    t1.ItemDate>=isnull((select ConfiguredValue from  dbo.[SSIS Configurations] where configurationfilter='updatedate'),'2008-01-01')

     

     11.sql表里的数据生成insert脚本

     

     

     12.取得一个表的所有列名,但是不包括XX (BENG_TB是表名)

    select name from syscolumns where  id=object_id('BENG_TB') and name not in ('DATE','TIME')

      需要注意的是 ,object_id里面必须写表名,你写数据库.dbo.表名都不行,所以这东西只能在该表存在的数据库中使用了

     

     13.SQL行列转换中的IN不能写select语句怎么办?动态SQL可以实现!

    declare @sql nvarchar(4000)
    select  @sql=isnull(@sql+',','')+quotename(Name) from syscolumns where  id=object_id('BENG_TB') and name not in ('DATE','TIME')
    declare @sqlstr varchar(4000)
    set @sqlstr='select a.*,b.NodeID,b.TagName,301 as FactoryID from
    (
    SELECT rtrim(convert(varchar,replace([Date],''/'',''-'')))+'' ''+ ltrim(convert(varchar,[Time])) [DateTime] ,P.SupplyNum,p.Supplier
    FROM 
    (
        SELECT top 1 *
         FROM [QY_DATA].[dbo].[BENG_TB]
    )T
    UNPIVOT 
    (    
        SupplyNum FOR Supplier IN
        ('+@sql+')
    ) P) a inner join Realtime5.dbo.Web_Node b on a.Supplier=b.TagName
    ' 
    exec(@sqlstr)

    动态SQL,屌屌的~

     

     14.order by多个字段排序(因为他们是字符格式,所以我都转换了一下格式)

    order by CONVERT(datetime,DATE,120) desc,CONVERT(datetime,TIME,120) desc

     

     15.多表联表更新

    update 表1 set Name=a.TagDescription  from 表2 a where ID=a.NodeID

    还可以这样

    update a set
    a.h0=b.h0,a.h1=b.h1,a.h2=b.h2,a.h3=b.h3,a.h4=b.h4,a.h5=b.h5,a.h6=b.h6,a.h7=b.h7,
    a.h8=b.h8,a.h9=b.h9,a.h10=b.h10,a.h11=b.h11,a.h12=b.h12,a.h13=b.h13,a.h14=b.h14,
    a.h15=b.h15,a.h16=b.h16,a.h17=b.h17,a.h18=b.h18,a.h19=b.h19,a.h20=b.h20,a.h21=b.h21,
    a.h22=b.h22,a.h23=b.h23 from [IPMLBZ].[PMIS5].[dbo].Web_daydata a inner join [PMIS5].[dbo].Web_daydata b
    on a.id = b.ID and a.ID= 23459 and a.date_day= b.date_day and a.Date_Day= '2018-08-27' 

    但是这里需要注意一点,a.ID=这里,貌似不能用in (1,2,3),不能使用in,只能用等于号。这个不清楚为什么。

     16.获取当前日期并判断是星期几

    select   
    case   datepart(dw,getdate()) 
    when   1   then   '星期天 ' 
    when   2   then   '星期一 ' 
    when   3   then   '星期二 ' 
    when   4   then   '星期三 ' 
    when   5   then   '星期四 ' 
    when   6   then   '星期五 ' 
    when   7   then   '星期六 ' 
    end

    但是上面这个方法很麻烦,这里有一个更简单的方法来判断输入的日期是周几

    select datename(weekday,'2018-06-01')

     

    17.数据库有的时候,我新建的表打不出来?说不存在?

    ctrl+shift+R  按这个键,就会刷新,就可以打出表名了,还不行的话你多按几下....

     

    18.偷师学艺,数据库53错误

    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
    可以按照下面的步骤来做,就好了
    打开Sql server 管理配置器或者在命令行输入:SQLServerManager10.msc



    然后重启一个sql server的服务,重新打开SQL Server Management Studio,在服务器名称输入:(local)或者127.0.0.1,即可登录数据库了。

     

     

     19.根据in()里面的数据进行排序,也就是固定排序

    我查询的时候in()了一些数字,但是查出来之后自动排序了。我不想排序,可以使用charindex()方法,如下:

    select * from AnalysisData where ItemID in(
    11002,114101,214011
    )  
    Order By charindex(','+RTRIM(cast(ItemID as varchar(10)))+ ',',',11002,114101,214011,')

    这样就可以按照in里面的数字进行排序了

     

    20.接着19讲,Order by这里我又理解了一下

    Order by应该只能用在语句的最后,例如:

    select '当前' h,charindex(','+RTRIM(cast(winame as varchar(100)))+ ',',',pH值,浑浊度,臭和味,氨氮,游离余氯,总余氯,细菌总数,总大肠菌群,铝')
    ,* from [dbo].[WaterQuality] (@date1,@date2)
    where winame in('pH值','浑浊度','臭和味','氨氮','游离余氯','总余氯','细菌总数','总大肠菌群','')
    
    union 
    
    select '同比' h,charindex(','+RTRIM(cast(winame as varchar(100)))+ ',',',pH值,浑浊度,臭和味,氨氮,游离余氯,总余氯,细菌总数,总大肠菌群,铝')
    ,* from [dbo].[WaterQuality] (Convert(varchar(10),(Dateadd(YEAR,-1,@date1)),23),Convert(varchar(10),(Dateadd(YEAR,-1,@date2)),23))
    where winame in('pH值','浑浊度','臭和味','氨氮','游离余氯','总余氯','细菌总数','总大肠菌群','') 
    
    union
    
    select '环比' h,charindex(','+RTRIM(cast(winame as varchar(100)))+ ',',',pH值,浑浊度,臭和味,氨氮,游离余氯,总余氯,细菌总数,总大肠菌群,铝')
    ,* from [dbo].[WaterQuality] (Convert(varchar(10),(Dateadd(MONTH,-1,@date1)),23),Convert(varchar(10),(Dateadd(MONTH,-1,@date2)),23))
    where winame in('pH值','浑浊度','臭和味','氨氮','游离余氯','总余氯','细菌总数','总大肠菌群','')
    order by h,charindex(','+RTRIM(cast(winame as varchar(100)))+ ',',',pH值,浑浊度,臭和味,氨氮,游离余氯,总余氯,细菌总数,总大肠菌群,铝')

    我原来三个语句,当前,同比,环比都写了Order by  但是就不能union了,  所以我觉得Order by是应该写在最后的。然后我排序的固定内容也写在了select后面才得以实行

     

     21.判断除数不能为0

    Sql Server好像没有判断是否为0的函数,只有一个NULLIF可以用一下,这个是判断如果是0就设置为NULL,还可以用

    1/NULLIF(列名,0)

     

    22. 一个表的数据查询结果插入另外一个表

    insert into VaeDB.dbo.A(Name)  select Name from B group by Name

     

    23. Sql Server修改查询结果

     

    使用编辑查询结果的方式,适合小数据量的时候,有时候不想写update语句

    先在表上点击编辑前200行,然后选择显示SQL窗格,如图

    这个时候直接输入sql语句,查询的结果可以在下面直接修改,少量数据还是很方便的

     

    24.去除所有重复的数据,或者得到所有不重复的数据,使用的是group by和having的组合搭配,巧妙的是min函数,这样重复的数据我只拿第一个,这不就不重复了吗

    网上全都是介绍distinct的,这个distinct不好用,只能看一列数据,没用而且效率很低

    --这个是所有不重复的数据
    select ReplaceProductName, min(ProductAlterId) as minProductAlterId from ProductAlter group by ReplaceProductName having COUNT(ReplaceProductName)>=1 order by minProductAlterId
    
    --这个是所有重复的数据
    select * from ProductAlter a inner join (
    select ReplaceProductName, min(ProductAlterId) as minProductAlterId from ProductAlter group by ReplaceProductName having COUNT(ReplaceProductName)>1 ) as aa
    on a.ReplaceProductName=aa.ReplaceProductName and a.ProductAlterId<>aa.minProductAlterId order by a.ProductAlterId

     

    25. 去除字段中所有的空格

    单纯的使用Ltrim或者Rtrim有时候是不行的,因为空格中存在换行符,回车等,所以要先替换掉这些特殊字符,再去除空格

    LTRIM(RTRIM(REPLACE(REPLACE( 字段A,char(13),''),char(10),'') ))

     

    转载于:https://www.cnblogs.com/yunquan/p/7519623.html

    展开全文
  • 数据库基础知识点 启动,关闭及登录MySQL 使用SQL语句操作数据库 使用SQL语句操作表结构
  • 本文实例讲述了MySql数据库基础知识点。分享给大家供大家参考,具体如下: 数据库基本操作 1)创建数据库 基本语法: create database 数据库名称 ; 创建应该名称为itcast的数据库sql语法如下: ``create ...
  • 数据库分类:  关系型数据库: oracle MySQL  非关系型数据库: 一个认知:oracle 特点、优点 ...oracle:商业运用第一的关系型数据库 ...实质:关系型数据库 ... 数据库:数据存储的仓库 ... sql
    数据库分类:

      关系型数据库: oracle  MySQL
      非关系型数据库:  

    一个认知:oracle 特点、优点
    oracle:商业运用第一的关系型数据库
    实质:关系型数据库


    二个概念:
      数据库:数据存储的仓库
      关系型数据库:数据库中保存的对象之间可以存在一定的关联关系,并非完全独立。主要反映到以后学习的主外键.


    三个名词:
      sql:结构化的查询语句,操作oracle数据库的语言
      sqlplus:oracle软件自带的可以输入sql,且将sql执行结果显示的终端
      pl/sql:程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如if for...,使之成为一个sql块,完成一定的功能


    四种对象:
      table:表格
      view:视图
      sequence:序列
      index: 索引


    五种分类:
      select   查询
      DML      行级操作
      DDL      表级操作
    transaction事物控制
      DCL      数据控制


    select 语句 

    1.sql命令书写规则 
    命令可以使一行或者多行(只要不加;)
    命令不区分大小写,但是值区分
    命令在执行过后会被写到缓存中




    select 列名(*代表全部列) from 表名


    2.计算  先乘除再加减 ()先算


    3.给列取别名
         select 列名 【as】 新的名称,
    或者 select 列名 新的名称 
         from 表名


    4.字符串的拼接(列的拼接)||
      select 列名1|| ‘想添加的字符’|| 列名2  from 表名 


    5.对空值进行运算 :nvl
      原来是什么数据类型,就替换成什么类型
      
    select 列1,nvl(存在null的列名,如果为空用什么替代)from 表名


    6.distinct(去重) 关键词只能放在select关键词之后


    第二章:
      order by: 排序 (放在语句的最后一句)
       select column from table order by 列名 asc/desc


    排序可以使用列的别名
    select id ,salary sal from s_emp order by sal desc


    排序可以用之前列名的数字编号
    select id,salary from s_emp order by 1,2

    where :

    select colum from table where 条件1 逻辑运算 条件2 order by 


    执行顺序:(使用表或者列的别名时需注意是否能使用)
    1.from
    2.where
    3.select
    4.order by


    第三章:单值函数
    lower:将所有字母转换成小写
    upper:将所有字母转换成大写
    initcap:首字母大写,其余字母小写
    concat(value1,value2)
    substr:(字符串,开始位置,截取长度)  开始位置下标为1,截取长度随意
    length:获取字符串长度


    数字函数
    round(操作数,保留位)  四舍五入 0为个位 -1十位 1为小数点后一位
    trunc(操作数,截取位)  截取到截取位,后面全部舍弃,个位前截取补0
    mod(除数,被除数) 求余 


    日期函数:
    sysdate
    months_between('15-3月-19','15-3月-17')  日期之间差多少个月份
    add_month(sysdate,'日期格式')  4当前时间往后推4个月   -4为往前推4个月
    next_day(date,'星期几')  距离这个日期最近的下一个星期几
    last_day(date,'星期几')  上一个
    round(date,'MONTH') 把当前日期进位到月
    round(日期,保留位数)  MOUTH  看天,如果是15那就舍弃  如果是16进位
                           YEAR   看月,如果是6月以下舍弃  如果是7以上进位
    trunc  截断




    类型转换函数:
    字符类型 number date
    date/number -----> 字符类型
    to_char(日期/number,'转换格式')


    字符类型------>number
    to_number(字符类型,'转换格式')


    to_date 把字符转换为日期
    to_date(‘10-12月-15’,dd-mon-yy)


    mm:不能添加月

    格式转换能够出现的字符:
    fm : 去除空格
    $:美元符号
    L:本地货比符号(中国¥)
    .
    ,
    9
    0


    多表查询
    默认笛卡尔积显示


    连接查询:
    等值连接(一般  某一个表维护另一个表格中的外键)
    不等值连接(一个表中的数据是另外一张表中的一个范围)
    外连接:如果等值连接会忽略掉 内容没来的及补充的字段,但是我们又想查出来
    左外连接  多的表 left outer join 信息少的表 on 
    右外连接:少的表 right outer join 多的表 on
    全连接:  表1  full outer join 表2 on   先满足表1,再满足表2
    自连接: 给自己的表取两个别名就行自连接




    结果集处理:
    union:将两个查询出的数据合并的,相同的部门只出现一次
    minus:从一个集合中取出另一个集合中相同的内容
    intersect:取交集




    rownum:伪列    (分页时很有用)


    子查询:直接嵌套select语句,()别名



    1.自己部门的平均工资         组函数需注意的语法:若select中出现组函数,并且还有其他的非组函数,
    select avg(salary)                               若未出现在having中,则必须添加进group by 中
    from s_emp
    group bu dept_id ;
    2.查询每个员工的基本工资
    select last_name,salary,avgsal
    from s_emp e,(
     select dept_id avg(salary) avgsal
    from s_emp
    group bu dept_id ;
    ) temp
    where
    e.salary>temp.avgsal
    and
    e.dept_id=temp.dept_id


    第七章
    运行时参数
    1.可变参数
    select last_name
    from s_emp
    where id=&id;
    2.定义参数
    select last_name,id
    from &A 
    where id =10


    def A=s_emp    (定义A为s_emp)  临时变量 关掉再打开就消失
    undef 取消定义




    accept  定义后需要用户手动输入
    prompt  提示用户输入信息
    hide (控制台隐藏用户输入的信息)


    恒等值  1=1  (在where 后加恒等值 处理不确定条件下可能出现没有条件的情况)



    第八章
    数据建模:
    实体
    属性
    实体之间的关系


    ***前三种范式
    第一范式:
    1.列值不能再分
    第二范式:
    1.满足第二范式
    2.表中非主键列必须依赖于主键列
    第三范式:
    1.第一范式
    2.第二范式
    3.非主键列必须直接依赖于主键列,不能产生依赖传递




    主键最重要的要求:非空唯一




    第九章
    create table XXX(
      列名  数据类型 列级约束
      表级约束
    )


    字符类型:char 固定长度,占内存,效率高
              varchar 长度可变,省内存,效率低
              varchar oracle特有
    数字类型:number
    日期类型: date


    约束:
    primary key
    not null   非空(只能声明成列级约束)
    unique  值唯一
    check(……)自定义约束 


    给约束起名字
    constraint 表名_列名_约束类型




    语法:
    独立表格:
    insert into  table_name(需要插入数据的列) values(跟需要插的列保持一致的顺序的数据)
    更新 update 表名  set 需要更新的列名 = 需要更新的值  (可加where)


    删除
    delete from table_name {where 需要删除的列]


    具有关联关系的表格之间的:
    insert
    update                                                                                          
    delete


    create table t_customer(
    id number primary key,
    name varchar2(200) not null
    );

    create table t_order(
    id number primary key,
    content varchar2(200) not null,
    customer_id number references t_customer(id)
    );

    drop table t_customer;
    drop table t_order;


    注意:订单表中的外键列customer_id的值,是引用自顾客表t_customer中的主键列id的值
    1.这时候直接删除顾客表是不行的,因为t_customer的主键列的值被别的表给引用了.
    2.我们可以先删除订单表t_order,然后再删除t_customer就可以了
    3.如果非要想直接删除到顾客表t_customer,就需要使用下面的语句:
    drop table t_customer cascade constraints;
    4.该语句表示,删除t_customer表的同时,也级联删除与表相关的约束,外键约束没有了,这个表自然可以被删除掉
    5.cascade是级联的意思


    on delete cascade
    这个语句是在建表中,声明外键约束的时候一个可选项,表示在删除时同时删除外键约束。




    事务:
    保存点:savepoint A
    回滚:rollback  A




    程序退出时,事务会自动提交,但终端直接关闭,事务不会被提交




    第十二章
    alert
    1.给某个表一列或是多列
      alert table table_name
      add  列名 列数据类型,列名 列数据类型
    2.删除某一列
      alert table table_name
      drop  column 列名
    3.添加约束
     alert table table_name
     add constraint 约束名  约束类型(约束列)
    4.删除约束
      alert table table_name
      drop constraint 约束名
    5.修改表的名字
      rename 旧表名 to 新的表名
    6.更改表的类型
      alert table table_name
      modify(更改的列 更改的数据类型)
    7.让约束失效
      alert table table_name
      disable constraint 约束名 
    8.让约束生效
      alert table table_name
      enable constraint 约束名
    9.截断表中的数据(默认提交,不能回滚)
     truncate table table_name
    10.添加注释
     comment on table 表名 is '表的描述信息'
     comment on table 表名.列名 '列的描述信息'
    查询表的注释或是列的注释都是借助数据字典进行查看
     user_tab_comments
     user_col_comments




    第十三章:序列


    create sequence 序列名;


    如果需要设置属性,那么就加上下面的语句.
    [INCREMENT BY n]  每次拿出值加多少
    [START WITH n]    初始值从几开始
    [{MAXVALUE n | NOMAXVALUE}]  最大值
    [{MINVALUE n | NOMINVALUE}]  最小值
    [{CYCLE | NOCYCLE}]  到了最大值后是否循环(如果循环会从1开始)
    [{CACHE n | NOCACHE}] 每次在缓存里面放多少个值.


    select seq_test.nextval from dual;





    //插入数据 使用序列产生id值
         insert into t_user(id,name,salary) 
         values(t_user_seq.nextval,'tom',2000);
    直接使用不能单独使用




    第十四章:视图


    create or replace view 视图名字
    as
    sql语句




    删除视图
    drop view 视图名字;




    视图分为俩类:
    简单视图:
      视图所代表的sql中如果没有group by语句,没有组函数,查询的只有一张表,那么这样的视图就是简单视图.
    复杂视图
      视图所代表的sql中如果有group by语句,或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图.




    简单视图和复杂视图的区别:
    通过简单视图可以修改原来表中的数据,通过复杂视图是不能修改原来的数据的。


    with read only语句 
    特点:只能通过视图进行查询数据,不能修改
    with check option语句
    特点:通过视图进行的修改 那么也必须可以通过这个视图能够显示出来,要不然就操作失败


    例如:
    //测试用的表及其数据
    drop table t_user;
    create table t_user(
    id number constraint user_id_pk primary key,
    name varchar2(100),
    salary number
    );


    insert into t_user values(1,'tom',1000);
    insert into t_user values(2,'tom2',2000);


    创建视图:
    create or replace view v_test
    as
    select id,name,salary
    from t_user
    where id=2
    with check option;



    //查询视图中的数据
    select * from v_test;


    //插入报错 因为这个操作通过视图显示不出来
    insert into v_test values(3,'tom3',3000);


    //更新失败 因为这个操作通过视图显示不出来
    update v_test
    set name='lily'
    where id=1;


    //更新成功 因为这个操作通过视图可以显示出来
    update v_test
    set name='lily'
    where id=2;




    第十五章:索引


    索引的创建:
    1.自动创建
    当在表中指定了primary Key或者unique约束时会自动创建唯一值索引。
    2.用户创建。
    用户可以创建非唯一值索引以提高在访问数据时的效率。
    语法:
    create index 索引名
    on 表名(列名);
    例如:
    create index emp_index
    on s_emp(last_name);

    删除索引:
    drop index 索引名;
    例如:
    drop index emp_index;


    创建成功后可以通过如下语句查看:
    select index_name from user_indexes;




    第十六章: 用户权限控制
    1.创建用户
    create user user_name identified by password
    例如:
    create user zhangsan identified by zhangsan;


    2.删除用户
    drop user zhangsan cascade;


    3.赋予权限
    grant privilege to user;
    例如:把建表 建序列 建视图的权限赋给zhangsan
    grant create table, create sequence,create view to zhangsan;


    //把connect角色和resource角色赋给zhangsan
    //角色是一组权限的集合
    grant connect,resource to zhangsan;




    注意: 只是登陆oracle数据库的话 需要的权限是create session

    4.修改密码
    alter user user_name identified by password;


    例如:
    alter user zhangsan identified by zhangsan123;


    5.赋予某一个用户某种对象操作的权限
    grant operator on object to user;

    例如:
    grant select 
    on t_user 
    to briup; 


    6.回收权限
    revoke operator on object from user;


            7.数据库的导入导出
    系统终端执行
    导出:exp   根据提示按回车下一步即可
    导入:imp  根据提示按回车下一步即可
    展开全文
  • SQL数据库知识点总结1

    2019-05-29 13:26:00
    1. 数据库三级模式结构 1) 模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征描述,也是所有用户的公共数据视图。 一个数据库只有一个模式 注:定义模式时不仅要定义逻辑结构,而且要定义数据之间的联系,...

    1.     数据库三级模式结构

    1)      模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征描述,也是所有用户的公共数据视图。 一个数据库只有一个模式

       注:定义模式时不仅要定义逻辑结构,而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求。

    2)      外模式:也称用户模式,它是数据库用户(包括应用程序员和终端用户)能看见和使用的局部数据的逻辑结构和特征描述,是数据库用户的数据视图。一个数据库可以有多个外模式

    3)      内模式:称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内的表示方式。

    2.     常见的数据模型

    数据模型是数据库系统的核心与基础,是关于描述数据与数据之间的联系、数据的定义、数据一致性约束的概念性工具的集合。

    1)        层次模型:树形结构表示实体类型与实体间的关系

    2)        网状模型:用有向图结构表示实体类型与实体间联系

    3)   关系模型:以二维表描述数据。数据结构清晰、简单、具有很高的数据独立性。是目前主要的数据库数据模型。

        关系模型基本术语:

               关系:一个二维表就是一个关系

               元组:二维表中的一行,即表中的记录

               属性:二维表中的一列,用类型和值表示

             域:每个属性取值的变化范围

       关系模型中的数据约束:

                 实体完整性约束、参照完整性约束、用户定义的完整性约束

    3.     数据库三范式是什么?

    第一范式:表中每个字段都不能再分。

    第二范式:满足第一范式并且表中的非主键字段都依赖于主键字段。

    第三范式:满足第二范式且表中的非主键字段必须不传递依赖于主键字段,不可传递性依赖。

    4.     数据库常用对象

    表、视图、存储过程和索引等具体存储数据或对数据进行操作的实体都称为数据库对象。

    5.     标识符

    1)  标识符的首字符必须是下列字符之一。

       统一码(Unicode)的字母,包括拉丁字母a~z、A~Z,以及其他语言的字符。

       下划线“_”、符号“@”或者数字符号“#”。

       注:某些标识符具有特殊意义。以“@”符号开始的标识符表示局部变量或参数,以“#”开始表示临时表或过程,“##”表示全局临时对象。

    2)不允许嵌入空格或其他字符

    6.     基本数据类型

    分类

    数据特性

    数据类型

    整数数据类型

    常用的一种数据类型,可以存储整数或者小数

    Bit、Int、Smallint、tinyint

    货币数据类型

    用于存储货币值,使用时在数据前加上货币符号,默认“¥”

    Money、smallmoney

    浮点数据类型

    用于存储十进制小数

    Real、float、decimal、numeric

    时间/日期数据类型

    用于存储日期类型和时间类型的组合数据

    Datetime、smalldatetime、data、datetime(2)

    字符数据类型

    用于存储各种字母、数字字符和特殊字符

    Char、nchar(n)、varchar、nvarchar(n)

    二进制数据类型

    用于存储二进制数据

    Binary、varbinary

    图像和文本数据类型

    用于存储大量的字符和以及二进制数据

    Text、ntext、image

     

    7.     T-SQL语句结构

    Select 子句 [Into 子句] from 子句 [where 子句] [group by 子句] [having 子句] [order by 子句]

    <1>Select into语句

       从表中选取数据,然后把数据插入另一个表中;创建的数据备份复件或用于对记录进行存档。

    <2>Select into语法

    Select * into new_tablename [in externaldatabase] from old_tablename

                                用于向另一数据库中拷贝表 

    Select column_name(s) into new_tablename [in externaldatabase] from old_tablename

    8.     常量

    数字常量、字符常量、日期和时间常量、符号常量

    9.     变量(作用于程序内部,以“@”开头)

                        1.声明局本变量Declare {@varible_name  datatype[,…n]}

                                       select语句select @varible_name=expression

    局部变量      2.为局部变量赋值         [from table_name[,..n] where clause]

                                         set语句set @varible_name=expression

     注:select与set区别

            select可以同时多个赋值;没有返回值时,select保持原值,set赋值为NULL;建议使用Set,原因是因为Set语句没有结果,占用资源少,因此,给一个变量赋值时,使用Set效率 更高

    全局变量  全局变量以“@@”开头,系统提供了30多个全局变量

    10.  运算符

    1.1.         算术运算符   包括+(加)、-(减)、×(乘)、/(除)、%(取余)

    1.2.         赋值运算符   =(等号)

    1.3.         比较运算符   >大于、<小于、=等于、>=大于等于、<=小于等于、<> 或!= 不等于、!>不大于

    1.4.         逻辑运算符  all、and、any、between、exists、in、like、not、or、some

    1.5.         位运算符    &(and)、|(or)、^(互斥or)、~(not)

    1.6.         连接运算符   +

    运算符优先级(高到低)

    1. 括号:();
    2. 乘、除、求模运算符:*、/、%;
    3. 加减运算符:+、- ;
    4. 比较运算符:=、>、<、>=、<=、<>、!=、!>、!<;
    5. 位运算符:^、&、|;
    6. 逻辑运算符:NOT>AND>OR;

    11.    流程控制

           1,begin....end

                多条Transact-SQL语句组成的代码段,从而可以执行一组Transact-SQL语句。BEGIN和END是控制流语言的关键字。BEGIN...END语句块通常包含在其他控制流程中,  用来完成不同流程中有差异的代码功能。

    DECLARE @count INT
    set @count = 0
    WHILE @count < 10
    BEGIN
        PRINT 'count = ' + CONVERT(VARCHAR(10), @count)
        set@count = @count + 1
    END
    
    PRINT 'loop finished, count = ' + CONVERT(VARCHAR(10), @count)

      2.If...else语句

         用于在执行一组代码之前进行条件判断,根据判断的结果执行不同的代码。

       3.case语句

      case语句是多条件分支语句,相比IF...ELSE语句,CASE语句进行分支流程控制可以使代码更加清晰,易于理解。CASE语句根据表达式逻辑值的真假来决定执行的代码流程。

    DECLARE @score INT
    SET @score = 100
    
    SELECT CASE 
                WHEN @score >= 90 THEN '优秀'
                WHEN @score >= 80 THEN '良好'
                WHEN @score >= 70 THEN '中等'
                WHEN @score >= 60 THEN '及格'
                ELSE '不及格'
            END
            AS '成绩'

    4.while语句

       根据条件重复执行一条或多条T-SQL代码,只要条件表达式为真,就循环执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。

    declare @x int,@sum int
    select @x=1,@sum=0
    while  @x<10
    begin
      set @x=@x+1
      if @x%2=0
      set @sum=@sum+@x
      else
      continue
    end
    print @sum
    

    5.waitfor 

      指定触发器、存储过程或事务执行的时间;还可以用来暂时停止程序执行,指导设定的时间已过才继续执行。

    delay参数:设定等待时间,最多可达24小时

    waitfor delay'00:00:01' 
    print '生日快乐!'
    

    time:设定等待结束时间

    waitfor time'15:00:00' 
    print '等待结束!'

    6.return

     用于从查询语句或过程中无条件退出。

    7.goto

    用来改变程序执行的流程,是程序跳到指定的程序执行

    declare @a int 
    set @a=1
    --标识符需要在名称后加一个冒号: loving: print @a set @a=@a+1 while @a<=3 goto loving

     

    转载于:https://www.cnblogs.com/ChnJuan/p/10943291.html

    展开全文
  • 数据库SQL Server知识点总结

    千次阅读 多人点赞 2019-06-17 21:41:49
    数据库SQL Server知识点总结 1. 数据库系统概述 1.1数据库技术的产生、发展 数据处理的中心问题是数据管理,数据管理经历了人工管理、文件系统和数据库系统三个阶段。 各阶段有如下特点 人工管理阶段:(1)...

    【数据库】SQL Server知识点总结

    1. 数据库系统概述

    1.1数据库技术的产生、发展

    数据处理的中心问题是数据管理,数据管理经历了人工管理、文件系统和数据库系统三个阶段。

    各阶段有如下特点

    • 人工管理阶段:(1)数据没有专门的存取设备 (2)数据没有专门的管理软件 (3)数据不共享 (4)数据不具有独立性。
    • 文件系统阶段:(1)数据以文件形式长期保存 (2)由文件系统管理数据 (3)程序和数据间有一定的独立性 (4)文件的形式已经多样化 (5)数据具有一定的共享性。
    • 数据库系统阶段:(1)结构化的数据及其联系的集合 (2)数据共享性高、冗余度低 (3)数据独立性高 (4)有统一的数据管理和控制功能 (4个控制功能:①数据的安全性控制 ②数据的完整性控制 ③并发控制 ④数据恢复)

    1.2数据库系统的组成

    数据库系统主要由数据库、数据库用户、计算机硬件系统和计算机软件系统等几部分组成

    数据库 :是存储在计算机内、由组织的、可共享的数据和数据对象的集合。有集成性和共享性的特点。

    数据库用户 :用户是指使用数据库的人,包括第一类用户(即最终用户)、第二类用户(即应用程序员)、第三类用户(即数据库管理员)。

    软件系统 : 主要包括操作系统(OS)、数据库管理系统(DBMS)及应用开发工具和应用系统等。DBMS是数据库系统的核心软件。

    硬件系统 : 指存储和运行数据库系统的硬件设备,包括CPU、内存、大容量的存储设备、输入输出设备和外部设备。

    1.3数据库系统的内部体系结构

    数据库系统内部的体系结构从逻辑上分为外模式、模式、内模式三级抽象模式结构和二级映像功能。

    (1)模式:也称概念模式,是全体数据的逻辑结构的描述,一个数据库只有一个模式。

    (2)外模式:也称子模式或用户模式,是部分数据逻辑结构的描述,外模式一般是模式的子集,一个数据库可以有多个外模式。

    (3) 内模式 :也称存储模式或物理模式,是对数据库存储结构的描述,一个数据库只能有一个内模式。

    DBMS在三级模式之间提供了二级映像功能,保证了数据库系统的数据独立性,即逻辑独立性和物理独立性

    (1)外模式 / 模式映像:数据库的同一模式可以有任意多个外模式,对于每一个外模式,都存在一个外模式 / 模式映像,确定了数据的局部逻辑结构与全局逻辑结构的对应关系。外模式 / 模式映像保证了数据与程序间的逻辑独立性。

    (2)模式 / 内模式映像:数据库中的模式和内模式都只有一个,所以模式 / 内模式映像是唯一的,确定了数据的全局逻辑结构和存储结构之间的关系。模式 / 内模式映像保证了数据的物理独立性。

    1.4数据库系统的外部体系结构

    1. 单用户结构的数据库系统 2.主从式结构的数据库系统 3.分布式结构的数据库系统 4.客户机 / 服务器结构的数据库系统(C/S) 5.浏览器 / 服务器结构的数据库系统(B/S)

    1.5数据模型

    数据模型分为以下三类:

    • 第一类是概念模型,是对现实世界的第一级抽象。
    • 第二类是逻辑模型(或称数据模型),是对现实世界的第二级抽象,逻辑模型主要包括层次模型、网状模型、关系模型和面向对象模型等。
    • 第三类模型是物理模型,是对数据的最底层抽象。

    数据模型主要由数据结构、数据操作和数据的完整性约束三部分组成

    2.关系数据库

    2.1关系模式

    关系模式的表示R(U)或R(A1,A2,…An),R为关系名,U为属性名的集合;A1,A2,…An为各属性名

    2.2关系的码与关系的完整性

    候选码:能唯一标识关系中元组的一个属性或属性集,称为候选码或候选键。

    主码:如果一个关系中有多个候选码,可以从中选择一个作为操作变量,被选用的候选码称为主码。

    主属性与非主属性:主属性:包含在主码中的各个属性称为主属性。

    ​ 非主属性:不包含在任何候选码中的属性称为非主属性。

    外码(外部关系键):如果R2的一个或一组属性X不是R2的主码,而是另一个关系R1的主码,则该属性或属性组X称为R2的外码。并称R2为参照关系,R1为被参照关系。

    2.3关系的完整性

    1. 实体完整性:实体完整性是指主码的值不能为空或部分为空。
    2. 参照完整性:如果R2的外码X与关系R1的主码相符,则X的每个值或者等于R1中主码的某一个值或者取空值。
    3. 用户自定义的完整性:用户自定义完整性是针对某一具体关系数据库的约束条件。

    2.4关系代数

    传统的集合运算:并(∪)、交(∩)、差(—)、广义笛卡儿积

    专门的关系运算:选取、投影、连接、除法

    3.关系数据库标准语言——SQL

    SQL是结构化查询语言,是关系型数据库的标准语言,其功能包括数据查询(select)、数据定义(create、drop、alter)、数据操纵(insert、update、delete)和数据控制(grant、revoke)。

    3.1SQL的基本概念

    1.基本表:一个关系对应一个基本表。

    2.视图:视图是从一个或多个基本表导出的表,是一个虚表。数据库只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

    SQL支持数据库的三级模式结构,外模式对应视图和部分基本表,模式对应基本表,内模式对应存储文件。

    3.2数据库的创建和使用

    创建一个数据库时,将至少产生两个文件:数据文件和事务日志文件。其中,数据文件又分为主数据文件,用来存储数据库的启动信息和部分或全部数据(扩展名为.mdf)和次数据文件,用来存储主数据文件未存储的其他数据(扩展名为.ndf)。事务日志文件,保存用于恢复数据库的日志信息(扩展名为.ldf)。

    3.2.1创建数据库

    create database 数据库名称      
    on
    (
        name = 数据文件名,
        filename = '路径+数据文件名',
        size = 数据文件初始大小,
        maxsize = 数据文件最大容量,
        filegrowth = 数据文件自动增长容量
    )
    log on
    (
        name = 日志文件逻辑名称,
        filename = '路径+日志文件名',
        size = 日志文件初始大小,
        maxsize = 日志文件最大容量,
        filegrowth = 日志文件自动增长容量
    )
    
    例如:
    create database Study
    on
    (
    	name = Study,
    	filename = 'D:\Study.mdf',
    	size = 5,
    	maxsize = 50,
    	filegrowth = 5
    )
    log on
    (
    	name = Study_log,
    	filename = 'D:\Study_log.ldf',
    	size = 5,
    	maxsize = 50,
    	filegrowth = 5
    )
    

    注意:(1)如果只使用第一条语句“create database 数据库名称”,系统会按照默认属性创建数据库。

    ​ (2)filegrowth可以是具体的容量,也可以是unlimited,表示无增长容量限制。

    ​ (3)用()括起来的语句,除了最后一个命令外,其余的命令都要用逗号作为分隔符。

    3.2.2修改数据库

    //像数据库中添加数据文件
    alter database 数据库名称
    add file
    (
        name = 数据文件名,
        filename = '路径+数据文件名',
        size = 数据文件初始大小,
        maxsize = 数据文件最大容量,
        filegrowth = 数据文件自动增长容量
    )
    
    //向数据库中添加日志文件
    alter database 数据库名称
    add log file
    (
        name = 日志文件逻辑名称,
        filename = '路径+日志文件名',
        size = 日志文件初始大小,
        maxsize = 日志文件最大容量,
        filegrowth = 日志文件自动增长容量
    )
    
    //从数据库中删除逻辑文件,并删除物理文件
    alter database 数据库名称
    remove file 文件逻辑名称
    
    //指定要修改的文件
    alter database 数据库名称
    modify file
    (
       name = 要修改的逻辑文件名,
        修改的内容(如:filegrowth = 20)
    
    

    3.2.3删除用户数据库

    drop database 数据库名称

    3.3数据表的创建和使用

    3.3.1数据类型

    常用的数据类型有整数型(bigint、int、smallint、tinyint、bit),数值型(numeric、decimal、float、real),货币型(money、smallmoney),日期型(datetime、smalldatetime),字符型(char、varchar、nchar、nvarchar、text、ntext)等

    3.3.2创建数据表

    create table 表名(列名 数据类型)
    例如:
    create table Student
    (
    	s_no char(6),
    	class_no char(6),
    	s_name varchar(10),
    	s_sex char(2) default '男',
    	s_birthday datetime 
    )
    

    default为默认值,当该字段未输入数据时,以该默认值自动填入字段。

    3.3.3定义数据表的约束

    约束分为列约束和表约束,列约束是对某一个特定列的约束,包含在列定义中。表约束不包含在列约束中,通常用于对多个列一起进行约束。

    完整性约束的基本语法格式为:constraint 约束名 约束类型,其中约束名可省略,系统会指定一个名称。

    在SQL Server中可以定义5种完整性约束

    1. NULL/NOT NULL
    create table Student
    (
    	s_no char(6) constraint sno not null,
    	age int
    )
    也可省略名称,如下:
    create table Student
    (
    	s_no char(6) not null,
    	age int
    )
    

    有了NOT NULL约束,当s_no为空时,系统会给出错误提示。

    1. UNIQUE约束(唯一约束)
    create table Student
    (
    	s_no char(6) unique,
    	class_no char(6)
    )
    unique也可用于表约束,如下:
    create table Student
    (
    	s_no char(6),
    	class_no char(6),
        sex char(2),
        constraint s_uniq unique(s_no,sex)
    )
    
    

    unique约束用于指明基本表在某一列或多个列的组合上的取值必须唯一,唯一约束可以为NULL,但为了保证唯一性,只能有一个NULL值。

    1. PRIMARY KEY约束(主键约束)
    create table Student
    (
    	s_no char(6) primary key,
    	class_no char(6),
    	s_name varchar(10),
    )
    primary key也可用于表约束,如下:
    create table Student
    (
    	s_no char(6),
    	class_no char(6),
    	s_name varchar(10),
        primary key(s_no,s_name)
    )
    

    primary key约束用于定义基本表的主键,起到唯一标识的作用,其值不能为NULL,也不能重复。

    1. FOREIGN KEY(外键约束)
    //主表
    create table S
    (
        class_no char(6) primary key
    )
    
    //从表
    create table Student
    (
    	s_no char(6),
    	class_no char(6) foreign key references S(class_no),
    	s_name varchar(10),
    )
    

    FOREIGN KEY约束指定某一列或几列作为外部键,其中包含外部键的表称为从表,包含外部键所引用的主键的表称为主表。

    1. CHECK约束
    create table Student
    (
        sex char(2) check(sex = '男' or sex = '女') default '男',
        age int check(age between 20 and 25)
    )
    

    CHECK约束用来检查字段值所允许的范围。

    3.3.4修改数据表

    (1)ADD方式:用于增加新列和完整性约束

    //向Student中增加新列name和address
    alter table Student
    add
    name char(6),
    address char(20)
    
    

    (2)ALTER方式:用于修改某些列

    //将Student表中的name列加宽到10个字符
    alter table Student
    alter column 
    name char(10) 
    
    

    (3)DROP方式:用于删除完整性约束

    alter table Student
    drop constraint 约束名
    
    

    3.3.5删除基本表

    drop table 表名

    3.4单表的数据查询

    创建一个基本表,如下:

    create table Student
    (
    	s_no char(6) primary key,
    	class_no char(6) not null,
    	s_name varchar(10) not null,
    	s_sex char(2) check(s_sex = '男' or s_sex = '女'),
    	s_birthday datetime 
    )
    
    
    s_no class_no s_name s_sex s_birthday99120
    991201 js0001 徐辉 1978-08-01 00:00:00.000
    991101 js0002 王一山 1980-12-04 00:00:00.000
    991104 js0002 牛莉 1981-06-09 00:00:00.000
    002101 xx0001 李丽丽 1981-09-19 00:00:00.000
    991102 xx0001 李王 1980-09-23 00:00:00.000

    3.4.1无条件查询

    格式为:select 列名 from 表名

    select s_no,class_no,s_name,s_sex,s_birthday
    from Student
    或
    select *
    from Student
    
    

    用 * 表示Student表的全部列名,而不必逐一列出

    select distinct s_no,class_no as c_s
    from Student
    
    

    distinct 会消去重复行;as可以为查询结果的列名重新命名

    3.4.2条件查询

    格式为:select 列名 from 表名 where 条件

    以下是条件查询中常用的几种比较运算符

    1. 比较大小(包含=、>=、<=、<、>、<>、!=)
    //查询出生日期在1980年以后的学生的学号
    select s_no
    from Student
    where s_birthday > '1980-01-01'
    
    //查询所有男同学,要求显示其学号s_no、姓名s_name、出生日期s_birthday
    select s_no,s_name,s_birthday
    from Student
    where s_sex = '男'
    
    
    1. 多重条件(包含AND、OR、NOT)
    //查询所有出生日期在“1980-01-01”前的女同学,要求显示其学号s_no、姓名s_name、性别s_sex
    select s_no,s_name,s_sex
    from Student
    where s_birthday < '1980-01-01' and s_sex = '女'
    
    
    1. 确定范围(BETWEEN…AND)
    //查询出生日期在1980-1-1和1982-1-1之间的学生的姓名和出生日期
    select s_name,s_birthday
    from Student
    where s_birthday between '1980-1-1' and '1982-1-1' 
    
    
    1. 确定集合(IN)
    //查询班号为js0001和js0002的学生的姓名和班号
    select s_name,class_no
    from Student
    where class_no in('js0001','js0002')
    此语句也可用OR实现
    select s_name,class_no
    from Student
    where class_no = 'js0001' or class_no = 'js0002'
    
    
    1. 字符匹配(LIKE)
    //查询所有姓“李”的男同学,要求显示其学号s_no、姓名s_name、性别s_sex、出生日期s_birthday
    select s_no,s_name,s_sex,s_birthday
    from Student
    where s_sex = '男' and s_name like '李%' 
    
    //查询所有姓名中含有“一”字的同学,要求显示其学号s_no、姓名s_name。
    select s_no,s_name
    from Student 
    where s_name like '%一%'
    
    

    %代表0个或多个字符;_(下划线)代表一个字符

    1. 空值(IS NULL)
    //查询出生日期为空的学生姓名
    select s_name
    from Student
    where s_birthday is null
    
    

    is null不能写成= null

    3.4.3常用聚合函数

    AVG(按列计算平均值)、SUM(按列计算值的总和)、MAX(求一列中的最大值)、MIN(求一列中的最小值)、COUNT(按列值统计个数)、COUNT(*)用来统计元组的个数,不消除重复行。

    //查询有多少个班级
    select count(distinct class_no) as classnum
    from Student	
    
    

    distinct 表示消除重复行,as为查询的每一项内容取一个别名,否则查询结果中就不显示列名

    3.4.4分组查询

    GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。

    HAVING子句和WHERE子句一样是条件筛选,不同的是,WHERE子句是作用于基本表或视图,选出满足条件的元组,而HAVING子句是作用于组,选择满足条件的组。其顺序是WHERE 、GROUP BY、HAVING。

    select count(s_no) as s_num
    from Student
    group by class_no
    having(count(s_no) >= 2)
    
    

    3.4.5查询结果的排序

    ORDER BY子句可以为查询结果排序,DESC为降序,ASC为升序,默认时为升序。

    select s_no
    from Student
    order by s_no asc
    
    

    3.5多表的连接查询

    inner join(内连接):显示符合条件的记录。

    left outer join(左外连接):显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行以NULL显示。

    right outer join(右外连接):显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行以NULL显示。

    full outer join(全外连接):显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以NULL显示。

    cross join(交叉查询):将一个表中的每一个记录和另一个表中的每个记录匹配成新的数据行。

    创建一个数据表如下:

    create table Choice 
    (
    	s_no char(6),
    	course_no char(5),
    	score numeric(6,1)	
    )
    
    
    s_no course_no score
    991104 01001 78.0
    991201 01001 67.0
    991101 01002 90.0
    991102 01002 58.0

    3.5.1内连接查询

    //查询所有同学的选课及成绩情况,要求显示学生的学号s_no,姓名s_name,课程号course_no和课程的成绩score
    //隐式内连接查询
    select Student.s_no,s_name,course_no,score
    from Student,Choice
    where Student.s_no = Choice.s_no 
    
    //显示内连接查询
    select Student.s_no,s_name,course_no,score
    from Student inner join Choice
    on Student.s_no = Choice.s_no
    
    

    3.5.2外连接查询

    外部链接分为左外部连接和右外部连接两种。以主表所在的方向区分外部链接,主表在左边,则为左外部连接;主表在右边,则为右外部连接。

    //查询所有同学情况,要求显示学生的学号s_no,姓名s_name,成绩score
    select Student.s_no,s_name,score
    from Student left outer join Choice
    on Student.s_no = Choice.s_no
    
    

    3.5.3交叉查询

    select *
    from Student cross join Choice
    
    

    3.6子查询

    3.6.1普通子查询

    先执行子查询,然后把子查询的结果作为父查询的查询条件的值。

    (1)返回一个值的普通子查询

    当子查询的返回值只有一个时,可以使用比较运算符(= 、>、<、!=、>=、<=)将父查询和子查询连接起来。

    //查询和王一山是同一班级的同学的姓名(使用子查询)
    select s_name
    from Student
    where class_no = (select class_no
    				  from Student
    				  where s_name = '王一山')
    
    

    (2)返回一组值的普通子查询

    当子查询的返回值不是一个值,而是一组值的时候,不能用比较运算符,而应使用ANY或ALL或IN。

    //查询教授课程号为01001的教师姓名
    select s_name
    from Student
    where s_no = any( select s_no
    			     from Choice
    			     where course_no = '01001')
    
    

    = ANY等价与IN;NOT IN等价于<>ALL;>ALL等价于>MAX( );<ALL等价于<MIN( );>ANY登记于>MIN( );<ANY等价于<MAX( )。

    3.6.2相关子查询

    首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中.

    3.6.3其他类型查询

    (1)集合运算查询(union)

    (2)存储查询结果到表中(select…into)

    3.7数据表中数据的操纵

    3.7.1添加数据到数据表

    insert into 表名(列名)

    values(值)

    3.7.2修改数据表中的数据

    updata 表名

    set 列名 = 表达式

    where 条件

    可用子查询选择要修改的行。

    3,7,3删除数据

    delete

    from 表名

    where 条件

    可用子查询选择要修改的行。

    算了,后面不想写了。。。

    展开全文
  • 数据库知识点总结

    2021-01-05 22:09:27
    不同的数据库SQL语句可能有点不同 (方言),mysql oracle DB2 sql语句分类 DDL:操作数据库、表 数据定义语言 Data Definition Language DML:增删改表中的记录 数据操作语言 Data Manipulation Language DQL: 查询表...
  • My SQL数据库基础知识点全面总结笔记(上)

    万次阅读 多人点赞 2020-04-17 16:08:02
    //查看当前所有的数据库 use+库名;//打开指定的库 (只要用了use你就在那个库中了) show tables;//查看当前库所有的表 show tables from 库名;//查看其他库所有的表 create table 表名( 列名 列类型, 列名 列...
  • Java知识点总结大全(七) -- 数据库SQL语句基本操作关注后面会分享面向对象,io,集合,多线程,网络,sql的总结
  • 数据库知识 数据库系统DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统。 一个典型的数据库系统包括数据库、硬件、软件(应用程序)和数据库管理员(DBA)4个...
  • MySQL 1.概念 (1)数据库 数据库 可以比喻为一个大型打超 表 超市货架 数据 超市货物 ...(3)数据库管理语言 SQL:结构化查询语言 2.安装、配置与卸载(安装这里就不多解释了) 3.基础使用 (...
  • Microsoft SQL Server数据库知识点总结(一)

    千次阅读 多人点赞 2019-12-25 17:40:53
    Microsoft SQL Server数据库知识点总结(一)前言常见SQL分类常用基础语句1、创建数据库2、删除数据库3、备份数据库4、创建新表5、删除表6、增加删除列7、添加删除主键8、创建删除索引9、创建删除视图10、几个简单的...
  • 1, 登录数据库  sqlplus “/as sysdba” 最高权限  conn user/pwd 切换用户  创建用户: create user userName identified by pwd; 2, || 可以把两个字段合并显示   如:select xing||‘。’||名 from ...
  • 1.数据模型组成三要素:数据结构,数据操作和完整性约束条件 2.数据库系统的三级模式结构:模式,外模式和内模式 3.数据库是长期存储在计算机内,有组织的,可共享的大量数据的集合 ...6.SQL语...
  • 数据库系统概述 一、有关概念 1.数据 ... SQL Server Oracle 客户机/服务器型DBMS MySQL DB2 4.数据库系统(DBS) 数据库(DB) 数据库管理系统(DBMS) 开发工具 应用系统 二...
  • 数据库基础知识点总结

    千次阅读 2018-08-25 21:06:29
    sql通用知识点: 1、create、alert(修改表名、字段、字段类型、字段长度、删除字段)、drop 2、insert、update、delete、select、from、where、group by、having、order by、asc/desc、sum、count、avg、max、min...
  • 名词积累数据模型Data Model数据库系统的三级模式结构数据库系统的两级映射以及物理逻辑独立性数据的约束条件完整性约束SQL语句执行顺序控制...的不同关系代数SQL语句三值谓词逻辑数据库应用系统设计的基本过程ER图
  • 首先感谢博客园,创建了这个专属于开发者的知识共享平台,需要强调的是我并不是一个大牛级别的人物,只是一个初入园子还未见...以下是近期对SQL Server数据库所学知识的相关总结,希望可以在一些地方帮助初入门者,...
  • 接上篇《数据库技术知识点总结之一——事务隔离级别》 二. Mybatis 2.1 MyBatis 是如何执行的? 参考网址:《深入浅出Mybatis系列(十)—SQL执行流程分析(源码篇)》 MyBatis 执行一次指令的过程有两个阶段,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,123
精华内容 449
关键字:

数据库sql知识点总结