数据库学习笔记

数据库学习笔记 壹

频频更新中……

写在头里:本篇博客超越八分之四内容参考数据库系统概念(本科学和教育学版)第壹章(第3章部分的多表操作未有在此间讲,计划挪到第伍章再一齐座谈)
上面包车型客车例子中的测试都是在MySQL数据库中测试的

写在前面:本篇博客大部分剧情参考数据库系统概念(本科教学版)第一章(第2章部分的多表操作未有在此处讲,希图挪到第陆章再一起商量)

前言

用作技士工作已经不短日子了,不过数据库方面包车型地铁力量确实是拿不入手,所以准备开头系统的读书一下数据库知识。

笔者选用的数据库是微软对的SqlServer(MSSQL)

数据库学习笔记。最开始有2回笔者闲的悠闲出去面试,被问到从前有未有用过MSSQL,脑中一片空白不知道那是个什么,作者依旧说没用过。

无处不在的增加和删除改查



安装

读书数据库当然是从安装起来啦,此前各样据他们说数据的设置和卸载有非常的大难点,就算蒙受标题消除方案差不多都以重装系统,所以机智的自家接纳了虚拟机。

  • 原来有搞过VMware那个东东真的不错,但是假诺和睦用免费版的话,那就不是形似的残疾了。

  • 事先还用过壹段时间的Oracle家的VirtualBox,全部感到没有错,可是就和本身厌倦国产手提式有线电电话机一样,都懒得想理由。

  • 现行反革命手足用的是微软的Hyper-V,在Windows10类别的调控面板里运营这么些效果,重启,虚拟机安装完结,完美。

虚拟机安装到位后,在Windows管理工科具中打开Hyper-V管理工科具,小编打算把虚拟机文件都位于自个儿的运动硬盘里,所以点击右边的Hyper-V设置设置一下虚构硬盘和虚拟机的岗位。

虚拟机的互联网也是比较重大的,所以展开虚拟机沟通机管理器新建了个虚拟调换机。

注:dbname:代表数据库名称 ;tablename:代表表名称;col(num):代表列;type:代表类型; 田野先生(num):代表字段名称
  1. 开创数据库

create database dbname
  1. 删去数据库

drop database dbname
  1. 备份数据库

backup database  dbname to disk = '~/Desktop'
  1. 回复数据库

restore database dbname from disk = '~/Desktop'
  1. 成立新表

create table tablename(col0 type0 [NOT NULL] [primary key],col1 type1 [NOT NULL] ,...)
  1. 基本的sql语句

选择:  select * from tablename where 范围   
插入:  insert into tablename(field1,field2) values (value1,value2)
删除: delete from table1 where 范围 
更新: update tablename set field1 = value1 where 范围 
查找:select * from tablename where field1 like "%value1%"
排序:select * from tablename order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大: select max(field1) as maxvalue from table1
最小: select min(field1) as minvalue from table1

聚拢运算

此间会集运算的定义与数学中汇集的概念类似,可以依附文氏图加深驾驭。故此处对并运算进行进行,其余啊多少个自身类比,后边还会对聚集运算的多少个注意点进提醒。

SELECT * 与 SELECT 全字段 的执 行功用是有反差的

虚拟机的接连类型
  • 外部互连网说的是虚拟机和宿主机公用二个互连网,虚拟机能够访问外网。
  • 个中网络说的是虚拟机和宿主机相互之间可以访问,可是虚拟机无法访问外网。
  • 专项使用网络说的是只有虚拟机之间能够相互访问,可是宿主机不可能访问虚拟机。

笔者选用的是当中网络,正是简单的装个数据库啥的,也许以往大概把品种也配备在虚拟机里,那都不必要网络。假若选拔外表网络那瘪犊子老是自动更新。

下一场新建三个虚拟机,基本上便是下一步,下一步。。。

系统装置完了随后,防火墙关掉,查一下虚拟机的ip,用宿主机ping一下,通了,完美。

数据库安装文件,我选拔的是SqlServer 201七Dev版,用新型版的数据库是因为小编相比较欣赏用新的尽管自身最终只是装了数据库引擎,dev版是无偿开拓无需激活授权啥的。

举个例子 数据库操作在常常生活中的应用

   SQL语句例一:求某一字段在某一时间段内数量的总和
  表名 销售 字段有:编号 金额 统计这个表在某一时间段内金额的总和
  select sum(金额) from 表 where 条件
  SQL语句例二:SQL读出记录并统计出某一字段的总和
  select * ,SUM(字段) from 表名 where 条件 group by 字段
  SQL语句例三:SQL语句按每天、每月、每年统计出销售总额
  表名: 订单 字段有Ordertime(订单时间),money(金额)
  根据订单时间统计每天、每月、每年的销售总额
  1、每年
  select year(ordertime) 年,
  sum(money) 销售合计
  from 订单
  group by year(ordertime)
  2、每月
  select year(ordertime) 年,
  month(ordertime) 月,
  sum(money) 销售合计
  from 订单
  group by year(ordertime),
  month(ordertime)
  3、每日
  select year(ordertime) 年,
  month(ordertime) 月,
  day(ordertime) 日,
  sum(Total) 销售合计
  from 订单
  group by year(ordertime),
  month(ordertime),
  day(ordertime)
  SQL语句例四:统计某月销售量前10
  表名: 销售
  字段: 编号, 商品名称 价格 日期
  统计某月商品销量最大的商品前10个商品及销量。
  SELECT DISTINCT TOP 10 商品名称, SUM(价格) AS 产品总价, COUNT(*) AS 销量 FROM 销售 GROUP BY title
  加上月份:
  SELECT DISTINCT TOP 10 商品名称, SUM(价格) AS 产品总价, COUNT(*) AS 销量 FROM 销售 WHERE (MONTH(sdate) = '你要查的月份数字') GROUP BY 商品名称
  统计某月商品销量最大的商品前10个商品及销量并按销量排序
  SELECT DISTINCT TOP 10 商品名称, SUM(价格) AS 产品总价, COUNT(*) AS 销量 FROM 销售 WHERE (MONTH(日期) = '你要查的月份数字') GROUP BY 商品名称 ORDER BY 销量 DESC
  • ### union(群集并运算)

    • union
      私下认可去除重复,并升序排序(因为关乎到排序,故而会有成效上的劣势)
    • union all 就可保留重复项,并且保留原序(不举办排序)
    • 举个栗子(现成两张表如下)

      • stu_name age score
        Sunny 18 98
        Robbin 18 96
        James 19 67
        Jane 17 82

        Student表音讯如上

      • tech_name age
        James 32
        Marry 33
        Lory 33

        Teacher表的消息如上

      • 实践以下运算

        SELECT age
        FROM Student
        UNION
        SELECT age
        FROM Teacher
        

        获得如下结果(获得的结果未有再度成分,不过未有排序,表明MySQL数据库在此间未有对其进展排序输出,不过Oracle数据库是会对数码进行升序排序的)

      • age
        18
        19
        17
        32
        33
      • 进行以下运算

        SELECT age
        FROM Student
        UNION ALL
        SELECT age  
        FROM Teacher
        

        赢得如下结果(能够知道,UNION ALL 保留了双重成分)

      • age
        18
        18
        19
        17
        32
        33
        33
  • ### intersect(集结交通运输算)

  • ### except(集结差运算)

  • ### Note:

    • 参与聚众运算的三个视图的列数要自始自终

      • 举个栗子

        -- 下面的语句执行就会出错
        -- 因为第一个视图有两个字段,而第二个视图只有一个字段,无法进行集合运算
        SELECT age, score
        FROM Student
        UNION ALL
        SELECT age  
        FROM Teacher
        
    • 出席聚众运算的多个视图对应地方的字段的数据类型应该是一律的(数据类型包容就能够,字段名没有必要壹致)

      • 举个栗子

        -- 按上面的说法下面语句执行是非法的
        -- 因为第二个字段的数据类型不兼容,一个是浮点型,一个是字符串类型
        SELECT age, score
        FROM Student
        UNION ALL
        SELECT age, tech_name  
        FROM Teacher
        

        地点的书法在Oracle数据Curry获取了注脚,确实实践是会报错的,
        那MySQL数据库呢?大家推行以下,获得以下结果

      • age score
        18 98
        18
        19 67
        17 82
        32 James
        33 Marry
        33 Lory

        证实该写法在Mysql里面竟是是官方的(所以具备的特点都要视差别的数据库,视情形而解析)

    • 若无字段可加,又需保险列数一样,可控NULL做填充

      • 举个栗子

        SELECT age, score
        FROM Student
        UNION ALL
        SELECT age, NULL  
        FROM Teacher
        

        赢得如下结果哦

      • age score
        18 98
        18
        19 67
        17 82
        32
        33
        33
    • 相会运算的结果视图的字段名以第三个结果集的字段名称为主

      • 举个栗子

        SELECT stu_name
        FROM Student
        UNION
        SELECT tech_name
        FROM Teacher
        

        获取如下结果:

      • stu_name
        Sunny
        Robbin
        Marry
        Lory
        Jane
        James
    • Oracle数据库中,差运算不是except,
      而是minus;Oracle数据库union可以前边跟all,
      不过interscet和minus前边不可以(分化数据库差异)

  • 数据库在切实可行实行 SELECT * 的时候能够如此通晓:首先把 *
    替换来对应表的全字段类别,再实行。故在实践的的时候 SELECT *
    的频率是会更低的
  • 事实上 SELECT * 也是规范的无用语句
  • 故在其实使用进度中应该尽量幸免使用 SELECT *

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图