阿里AI训练营SQL入门与实践task1

  • 1.1初识数据库

    数据库(DB):一个含有大量数据并能高校访问的数据集合

    数据库管理系统(DBMS):用来管理数据库的计算机系统,如关系型数据库管理系统(RDBMS)

    • 1.1 DBMS的种类

      以数据的保存格式来进行分类,可分为5种类型:

      • 层次数据库(HDB)
      • 关系数据库(RDB):如Oracle Database、SQL Server、postgreSQL、MySQL
      • 面向对象数据库(OODB)
      • XML数据库(XMLDB)
      • 键值存储系统(KVS):如MongoDB
    • 1.2 RDBMS的常见系统结构

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B9qNDSOz-1639722965910)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c94e4181-8c07-4866-ba86-e8242d922a15/Untitled.png)]

    • 1.3 数据库的安装

  • 2.1 MySQL表结构概念介绍

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDbztR11-1639722965912)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ee292eb4-d946-4dd9-96c8-2bf7e50e5442/Untitled.png)]

    • 在数据库中,一行称为一条记录,一列称为一个字段。
    • 数据库名、列名与表名:只能使用半角英文字母、数字、下划线(_),以半角英文字母开头。
    • 数据类型:INTEGER 型、CHAR 型、VARCHAR 型(存储可变长度字符串)、DATE 型。
    • 表的约束:除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。(非空约束、主键约束)
  • 2.2 SQL语句的分类

    根据对 RDBMS 赋予的指令种类的不同,SQL 语句可以分为以下三类:

    • DDL

      数据定义语言(DDL)用来修改数据库或数据库中的表等对象。

      • CREATE : 创建数据库和表等对象
      • DROP : 删除数据库和表等对象
      • ALTER : 修改数据库和表等对象的结构
    • DML

      数据操纵语言(DML)用来查询或者修改表中的记录。

      • SELECT :查询表中的数据
      • INSERT :向表中插入新数据
      • UPDATE :更新表中的数据
      • DELETE :删除表中的数据
    • DCL

      数据控制语言(DCL)用来确认或者取消对数据库中的数据进行的变更。

      • COMMIT : 确认对数据库中的数据进行的变更
      • ROLLBACK : 取消对数据库中的数据进行的变更
      • GRANT : 赋予用户操作权限
      • REVOKE : 取消用户的操作权限
  • 2.3 SQL的基本书写规则

    • SQL语句要以分号( ; )结尾
    • SQL 不区分关键字的大小写,但是插入到表中的数据是区分大小写的
    • win 系统默认不区分表名及字段名的大小写
    • linux / mac 默认严格区分表名及字段名的大小写
    • 常数的书写方式是固定的
    • 单词需要用半角空格或者换行来分隔
  • 2.4 SQL语句示例

    • 数据库的创建(create database语句)

      --语法:CREATE DATABASE < 数据库名称 > ;
      CREATE DATABASE shop;
      
    • 表的创建(create table语句)

      --语法:
      --CREATE TABLE < 表名 >
      --( < 列名 1> < 数据类型 > < 该列所需约束 > ,
        --< 列名 2> < 数据类型 > < 该列所需约束 > ,
        --< 列名 3> < 数据类型 > < 该列所需约束 > ,
        --< 列名 4> < 数据类型 > < 该列所需约束 > ,
        .
        --< 该表的约束 1> , < 该表的约束 2> ,……);
      CREATE TABLE product(
           product_id CHAR(4) NOT NULL, 
           product_name VARCHAR(100) NOT NULL, 
           product_type VARCHAR(32) NOT NULL, 
           sale_price INTEGER, 
           purchase_price INTEGER, 
           regist_date DATE, 
           PRIMARY KEY(product_id)
       )  ;
      
    • 表的删除

      --语法:DROP TABLE <表名>;
      DROP TABLE product;
      
    • 表的更新

      • ALTER TABLE语句

        --添加列的ALTER TABLE语句
        --语法:ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;
        ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
        --删除列的ALTER TABLE语句
        --语法:ALTER TABLE <表名> DROP COLUMN <列名>;
        ALTER TABLE product DROP COLUMN product_name_pinyin;
        
        --注:ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复。
        
      • UPDATE TABLE语句

        --语法:
        --UPDATE <表名>
        --SET <列名> = <表达式> [, <列名2>=<表达式2>...];  
        --WHERE <条件>;  -- 可选,非常重要。
        --ORDER BY 子句;  --可选
        --LIMIT 子句; --可选
        --1.使用UPDATE时记得添加where条件,缩小修改范围
        	  -- 修改所有的注册时间
        		UPDATE product
        		   SET regist_date = '2009-10-10';  
        		-- 仅修改部分商品的单价
        		UPDATE product
        		   SET sale_price = sale_price * 10
        		 WHERE product_type = '厨房用具';
        --2.使用 UPDATE 也可以将列更新为 NULL(该更新俗称为NULL清空)。
        	  -- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL  
        		UPDATE product
        		   SET regist_date = NULL
        		 WHERE product_id = '0008';
        --3.UPDATE 语句的 SET 子句支持同时将多个列作为更新对象。
        		UPDATE product
        		   SET sale_price = sale_price * 10,
        		       purchase_price = purchase_price / 2
        		 WHERE product_type = '厨房用具';
        
    • 表的插入数据(insert into语句)

      --语法:
      --INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
      --1.对表进行全列 INSERT 时,可以省略表名后的列清单。这时 VALUES子句的值会默认按照从左到右的顺序赋给每一列。
      		-- 包含列清单
      		INSERT INTO productins (product_id, product_name, product_type, 
      		sale_price, purchase_price, regist_date) VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
      		-- 省略列清单
      		INSERT INTO productins 
      		VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
      --2.很多 RDBMS 都支持一次插入多行数据
      		-- 通常的INSERT
      		INSERT INTO productins VALUES ('0002', '打孔器', 
      		'办公用品', 500, 320, '2009-09-11');
      		INSERT INTO productins VALUES ('0003', '运动T恤', 
      		'衣服', 4000, 2800, NULL);
      		INSERT INTO productins VALUES ('0004', '菜刀', 
      		'厨房用具', 3000, 2800, '2009-09-20');
      		-- 多行INSERT ( DB2、SQL、SQL Server、 PostgreSQL 和 MySQL多行插入)
      		INSERT INTO productins VALUES ('0002', '打孔器', 
      		'办公用品', 500, 320, '2009-09-11'),
      		('0003', '运动T恤', '衣服', 4000, 2800, NULL),
      		('0004', '菜刀','厨房用具', 3000, 2800, '2009-09-20');  
      		-- Oracle中的多行INSERT
      		INSERT ALL INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11')
      		INTO productins VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL)
      		INTO productins VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20')
      		SELECT * FROM DUAL;  
      		-- DUAL是Oracle特有(安装时的必选项)的一种临时表A。因此“SELECT *FROM DUAL” 部分也只是临时性的,并没有实际意义。
      --3.INSERT 语句插入NULL值。
      		INSERT INTO productins (product_id, product_name, product_type, 
      		sale_price, purchase_price, regist_date) VALUES ('0006', '叉子', 
      		'厨房用具', 500, NULL, '2009-09-20');
      --4.INSERT … SELECT 语句从其他表复制数据
      		-- 将商品表中的数据复制到商品复制表中
      		INSERT INTO productocpy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
      		SELECT product_id, product_name, product_type, sale_price, 
      		purchase_price, regist_date
      		FROM Product;
      
  • 练习题

    • 1.1

      编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束

      https://img.alicdn.com/imgextra/i2/O1CN01yUhR8r1b2S3GHfh4B_!!6000000003407-2-tps-653-319.png

      CREATE TABLE Addressbook(
      regist_no INT NOT NULL,
      NAME VARCHAR(128) NOT NULL,
      address VARCHAR(256) NOT NULL,
      tel_no CHAR(10),
      mail_address CHAR(20),
      PRIMARY KEY(regist_no)
      );
      
    • 1.2

      假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请把此列添加到 Addressbook 表中。

      列名 : postal_code

      数据类型 :定长字符串类型(长度为 8)

      约束 :不能为 NULL

      ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
      
    • 1.3

      编写 SQL 语句来删除 Addressbook 表。

      drop table addressbook;
      
    • 1.4

      编写 SQL 语句来恢复删除掉的 Addressbook 表。

      --一般drop删除无法恢复
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值