• SQLServer的操作以及一些概念


    初始SQLServer

    创建数据库

    • create database 数据库名

    创建表

    1. 选择数据库

      • USE MyDb;
    2. 创建表

      CREATE TABLE t_user
      (
          id INT,
          username VARCHAR(32),
          password VARCHAR(32),
          phone VARCHAR(11)
      )
      

    使用主键约束

    方式一:在定义列的同时指定主键

    CREATE TABLE t_user
    (
        id INT primary key,
        username VARCHAR(32),
        password VARCHAR(32),
        phone VARCHAR(11)
    )
    

    方式二:在定义完所有列之后,指定主键

    CREATE TABLE t_user
    (
        id INT,
        username VARCHAR(32),
        password VARCHAR(32),
        phone VARCHAR(11),
    	primary key(id)
    )
    

    多字段联合主键

    CREATE TABLE t_emp2
    (
        name VARCHAR(32),
        deptId INT,
        salary FLOAT,
        PRIMARY KEY(name,deptId)
    )
    

    外键约束

    1. constraint 外键名 foreign key 字段名 references 主表名(主键名) ,在以后,我们统一将外部关键字叫做外键,外键就是另一张表中的主键

      CREATE TABLE t_dept
      
      (
          deptId INT PRIMARY KEY,
          name VARCHAR(22),
          location VARCHAR(50)
      );
      CREATE TABLE t_emp
      (
          id INT PRIMARY KEY,
          name VARCHAR(22),
          deptId INT,
      	CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId)
      );
      

    添加常用约束

    唯一约束

    1. 怎么添加唯一约束;唯一约束可以确保一列或者几列不出现重复值。使用关键词 UNIQUE

      CREATE TABLE t_dept(
          id INT PRIMARY KEY,
          name VARCHAR(22) UNIQUE,
          location VARCHAR(50)
      )
      

    非空约束

    1. 怎么添加非空约束; 关键词: NOT NULL 。

      CREATE TABLE t_dept(
          id INT PRIMARY KEY,
          name VARCHAR(22) NOT NULL,
          location VARCHAR(50)
      )
      

    默认约束

    1. 怎么添加默认约束;默认约束:即给字段一个默认值。关键词: DEFAULT 。

      CREATE TABLE t_emp(
          id INT PRIMARY KEY,
          name VARCHAR(22),
          sex VARCHAR(2) DEFAULT '男'
      )
      

    值自动增加

    1. 怎么设置字段的值自动增加。在数据库应用中,经常需要在每次插入新纪录时,系统自动生成字段的主键值,关键词:IDENTITY(1,1) 表示自动增长,初始值为 1 ,增量为 1

      CREATE TABLE t_tmp
      (
          id int PRIMARY KEY IDENTITY(1,1),
          name VARCHAR(32)
      )
      

    数据的插入,删除,更改

    插入

    插入完整内容的行

    INSERT INTO 表名 VALUES ('1000000006','Toy Land','New York',NULL)
    

    插入选定内容的行

    INSERT INTO 表名(cust_id,cust_name,cust_city) VALUES ('1000000006','Toy Land','New York')
    

    删除

    删除表中的指定行

    DELETE FROM 表名 WHERE cust_id=1000000006
    

    删除表中的所有行

    DELETE FROM 表名
    

    更改

    更新表中的指定行

    UPDATE 表名 SET cust_email = 'max@yahoo.com'  WHERE cust_id = '1000000005'
    

    数据查询

    基本SELECT语句

    检索数据表中一个字段的内容

    • SELECT 字段名 FROM 表名

    检索数据表中多个字段的内容

    • SELECT 字段名1, 字段名2, 字段名3 FROM 表名

    检索数据表中所有字段的内容

    • 如果你仅仅是想要第一行的数据或者前几行的数据

    • SELECT * FROM 表名

    带限制条件的查询

    限制条件

    image-20200610203204655

    • 你想知道这一批的书打6折后都是多少钱?你想知道字段 A 和字段 B 加起来是多少?

    • SELECT TOP 行数 字段名 FROM 表名

    表达式查询

    • SELECT 包含字段名的表达式 AS 新字段名 FROM 表名

    使用Where语句进行检索

    检索单范围数据

    表 Customers 中找到消费大于 1000 的人
    SELECT cust_name, cost FROM Customers WHERE cost > 1000
    

    检索双范围数据

    表 Customers 中找到消费在 1000~3000 之间的人
    SELECT cust_name, cost FROM Customers WHERE cost BETWEEN 1000 AND 3000
    

    检索不匹配某条件的语句

    表 Customers 中找到消费者不在 New York 的人
    SELECT cust_name, cust_city FROM Customers WHERE cust_city <> 'New York'
    

    通配符的使用

    通配符%的使用模糊匹配数据内容的后半部分

    模式匹配是大小写敏感的,% 能匹配多个字符
    SELECT 字段名 FROM 表名  WHERE  字段名 LIKE '数据%'; 
    

    通配符%的使用模糊匹配数据内容的任意部分

    SELECT * FROM Customers WHERE cust_email LIKE '%yahoo%'
    

    通配符下划线 _ , 只能匹配一个字符!

    SELECT 字段名  FROM 表名 WHERE  字段名 LIKE '数据和_的组合' 
    

    使用通配符[]模糊匹配数据内容

    • SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '[数据]'
    表 Customers 中,检索到所有 cust_name 以 a 和 t 开头的消费者的所有数据
    SELECT * FROM Customers WHERE cust_name LIKE '[at]%'
    

    使用通配符[]和^模糊匹配取反的数据内容

    • 对检索内容进行“取反”。使用符号 ^ 后,我们可以成功的检索到 [] 中没出现的字符
    SELECT 字段名  FROM 表名  WHERE  字段名 LIKE '[^数据]' 
    表 Customers 中,检索到所有 cust_name 不是以 a 和 t 开头的消费者的所有数据
    SELECT * FROM Customers WHERE cust_name LIKE '[^at]%'
    

    聚合函数在查询中的使用

    image-20200610200417797

    多表连接查询

    image-20200610201208185

    Where取公共部分(和内连接等同连接效果图相同)

    image-20200610201551467

    SELECT * 
    FROM student, class
    WHERE student.class_id = class.class_id
    

    image-20200610201703510

    内连接

    等同连接

    image-20200610202337305

    image-20200610202356916

    • 若要连接表 t1 和表 t2 ,比较条件为 t1.a = t2.a,那么数据库会用 t1 中 a 列的所有元素逐个和 t2 中的 a 列进行比较,如果相等,则输出该行。
    不等值连接

    image-20200610202543337

    自然连接

    image-20200610202634049

    外连接

    左连接

    image-20200610202708989

    image-20200610202726576

    右连接

    image-20200610202812509

    image-20200610202825411

    全连接

    image-20200610202837093

    image-20200610202852644

    关于笛卡尔积

    image-20200610203832451

    image-20200610203908526

    • 上述为笛卡尔积的影响,下为解决办法

    image-20200610204058658

  • 相关阅读:
    [LeetCode][JavaScript]Copy List with Random Pointer
    [LeetCode][JavaScript]Best Time to Buy and Sell Stock II
    [LeetCode][JavaScript]Best Time to Buy and Sell Stock
    [LeetCode][JavaScript]Populating Next Right Pointers in Each Node
    [LeetCode][JavaScript]Text Justification
    [LeetCode][JavaScript]LRU Cache
    用CRTP在C++中实现静态函数的多态
    C++的静态分发(CRTP)和动态分发(虚函数多态)的比较
    用Y分钟学会X
    看看你能认出多少种编程语言
  • 原文地址:https://www.cnblogs.com/dongxuelove/p/14154785.html
Copyright © 2020-2023  润新知