SQL入门学习笔记1.0

这篇博客介绍了SQL的基本概念,包括数据和表、SELECT、DELETE和UPDATE语句,强调了聪明的表设计和ALTER操作。通过实例展示了如何创建、查询、修改和删除数据,以及如何设计规范化表和设置主键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据和表

  1. 数据库:保存表和其他相关SQL结果的容器

  2. 流程图中,数据库都是以圆柱体表示

  3. 列是存储在表中的一块数据。行是一组能够描述某个事物的流的集合。行和列构成了表

  4. 数据库中所有的表应该能以某种方式相互关联

  5. 创建数据库
    CREATE DATABASE gregs_list;
    使用刚才的数据库
    USE gregs_list;

  6. 创建一个表
    CREATE TABLE doughnut_list
    (
    doughnut_name VARCHAR(10),
    doughnut_type VARCHAR(6)
    );

    • CRATE TABLE 创建表
    • 括号里输入表第一列和第二列名称
    • VARCHAR:保存以文本格式存储的信息
    • (6):表示这段文字的长度最多只有6个字符
  7. 各种数据类型

    • CHAR / CHARACTER
    • INT / INTEGER
    • DEC, DECIMAL
    • BLOB
    • DATE
    • TIMESTAMP / DATETIME
    • VARCHAR
      《SQL技术手册》
  8. 查看创建的表
    DESC my_contacts;

  9. 删除创建的表
    DROP TABLE my_contacts;

  10. 添加数据:INSERT
    INSERT INTO doughnut_purchases
    (donut_type, dozens, topping, price)
    VALUES
    ('jelly', 3, 'sprinkless', 3.50);

    INSERT 语句的三种形式

    • 改变列顺序:可改变列名和数据值的顺序
    • 省略列名:数据值必须有,且与列顺序完全相同
    • 省略部分列
  11. SELECT语句查看表
    SELECT*FROM my_contacts;

  12. NULL:代表未定义的值
    可以把列改为不接受NULL,但一定要提供NOT NULL列的值,否则会出现错误信息
    CREATE TABLE my_contacts
    (last_name VARCHAR (30) NOT null);

  13. 使用DEFAULT 填补空白

    如果某些列通常有某个特定值,可把特定值指派为DEFAULT默认值
    跟在DEFAULT关键字后的值会在每次新增记录时自动插入表中。
    默认值的类型必须和列类型相同

    CREATE TABLE doughnut_list
    ( doughnut_name VARCHAR(10) NOT NULL,
    doughnut_cost DEC(3,2) NOT NULL DEFAULT 1.00);

SELECT语句

1.WHERE :提供搜索的特定条件

SELECT * FROM my_contacts
WHERE first_name = 'zhang';

*:返回表中的所有列
2.单引号与不需要单引号
数据类型中,VARCHAR, CHAR,BLOB,DATA,TIME需要单引号。数字类的类型,DEC和INT不需要引号

3.当单引号为特殊字符,需加反斜线在单引号前再加单引号

INSERT INTO my_contacts
(location)
VALUES
('Grover\'s Mill');

INSERT INTO my_contacts
(location)
VALUES
('Grover''s Mill');

4.只显示特定数据
用列名代替 *
SELECT drink_name, main, second FROM easy_drinks WHERE main ='soda';

5.AND 同时处理两项查询

SELECT drink_name FROM easy_drinks
WHERE
main = 'soda'
AND
amount1 = 1.5

OR:返回符合条件之一的数据

6.比较运算符
* =
* <> / !=
* (>=)
* <=
* 可用于数据数据或文本数据的比较
SELECT drink_name
FROM drink_info
WHERE
drink_name >= 'L'
AND
drink_name < 'M';

7.用 IS NULL 找到 NULL
唯一直接选择NULL 的方法是利用关键字IS NULL

SELECT drink_name
FROM drink_info
WHERE
calories IS NULL;

8.LIKE 查找部分文本字符串并返回所有符合匹配条件的行

  • 通配符%——任意数量未知字符的替身
    SELECT first_name FROM my_contacts WHERE first_name LIKE '%im';
    查询在first_name列中所有以im结尾的值
  • 通配符下划线(_)——一个未知字符的替身
    SELECT first_name FROM my_contacts WHERE first_name LIKE '_im';
    查询结果例如:Kim

9.选取一个范围

  • AND

SELECT drink_name FROM drink_info
WHERE
calories >= 30
AND
calories <= 60;

  • BETWEEN
    SELECT drink_name FROM drink_info
    WHERE
    calories BETWEEN 30 AND 60;

10.查找是否在多个筛选条件 IN

SELECT date_name FROM
black_book
WHERE
rating IN('innovative', 'fabulous',
'delightful', 'pretty good');

  • 或者不符合特征的结果 NOT IN
    SELECT date_name from black_book
    WHERE NOT date_name LIKE 'A%'
    AND NOT date_name LIKE 'B%';

DELETE 和 UPDATE

  1. DELETE 与WHERE,AND,OR结合

DELETE FROM doughnut_ratings
WHERE location = 'Krispy King' AND rating >5;

2.创建新记录并删除旧记录

  • SELECT——INSERT——DELETE,先用SELECT 挑选你必须移除的记录,确认记录无误,并没有误删其他记录,用INSERT添加新的信息,再删除旧的信息
    SELECT * FROM clown_info
    WHERE
    activities = 'dancing';

    INSERT INTO clown_info
    VALUES
    ('CLARABELLE', 'Belmont senior', 'F,pink hair', 'dancing');

    DELETE FROM clown_info
    WHERE
    activities = 'yelling, dancing' AND name = 'Clarabelle';

    UPDATE改变数据
    UPDATE doughnut_ratings
    SET
    type = 'glazed'
    WHERE type = 'plain glazed';

  • 不加where子句,SET子句提到的表中的每行的每列都会被修改

    只改变type列中数值为plain glazed的行使用UPDATE, 可以改变单一列或所有列的值。在SET子句中加入更多column=value组,期间以逗号分隔:
    UPDATE your_table
    SET first_column = 'newvalue',
    second_column = 'another_value';

  • 一次更改多个数值
    UPDATE drink_info
    SET cost = cost + 1
    WHERE
    drink_name = 'Blue Moon'
    OR
    drink_name = 'Oh My Gosh'
    OR
    drink_name = 'Lime Fizz';

聪明的表设计

  1. 创建表

    • 表描述的事物
    • 用什么方式描述事物
    • 列是否包含原子性数据,让查询简短又方便
  2. 原子性数据 规则

    • 具有原子性数据的列中不会有多个类型相同的值
    • 具有原子性数据的表中不会有多个储存同类数据的列
  3. 规范化表的优点

    • 规范化表中没有重复的数据,可以减少数据库的大小
    • 因为查找的数据较少,查询更为快速。
  4. 完全的规范化INF

    • 每个数据行必须包含具有原子性的值
    • 每个数据行必须具有独一无二的识别项——主键
  5. 主键:表中的某个列,让每一条记录成为唯一的,用于独一无二地识别出每条记录。 PRIMARY KEY

  6. 主键的规则

    • 主键不可以为NULL
    • 插入新记录时必须制定主键值
    • 主键必须简洁
    • 主键值不可以被修改
  7. 为现有的表添加主键
    ALTER TABLE 并添加PRIMARY KEY
    ALTER TABLE my_contacts
    ADD COLUMN contact_id INT NOT
    AUTO_INCREMENT FIRST,
    ADD PRIMARY KEY (contact_id);

  8. AUTO_ONCREMENT
    若在列的声明中使用这个关键字,则每次执行INSERT命令来插入数据时,它都会自动给列赋予唯一的递增整数值。

ALTER 改写历史

  1. 添加一列
    ALTER TABLE my_contacts
    ADD COLUMN phone VARCHAR(10)
    AFTER birst name;

    ADD COLUMN 添加列
    ALTER :把phone列放在birst_name列后
    不使用的话,新列会添加到表最后

  2. 修改表

    • CHANGE :可同时改变现有列的名称和数据类型
    • MODIFY:修改现有列的数据类型和位置
    • ADD:在当前表中添加一列
    • DROP:从表中删除某列
    • DESCRIBE 查看表的构成
  3. 更换名称

    • 更换表的名称
      ALTER TABLE projekts
      RENAME TO project_list;
    • 改变列名,并标注为主键
      ALTER TABLE project_list
      CHANGE COLUMN number proj_id INT NOT NULL AUTO_INCREMENT,
      ADD PRIMARY KEY (proj_id);

      AUTO_INCREMENT自动填入递增的整数
      ADD……——使用新命令的列作为主键

    • 更换两个列
      ALTER TABLE project_list
      CHANGE COLUMN descriptionof proj_desc VARCHAR(100),
      CHANGE COLUMN contractoronj con_name VARCHAR(30);

  4. 只改变数据类型, 关键字:MODIFY
    ALTER TABLE project_list
    MODIFY COLUMN proj_desc VARCHAR(120);

    project_list 要修改的列名
    VARCHAR(120)新数据类型, 保证新类型不会造成旧数据被截断。

  5. 卸除列DROP COLUMN
    ALTER TABLE project_list
    DROP COLUMN start_date;

  6. 使用FIRST, LAST, BEFORE column_name, AFTER column_name, SECOND,THIRD, FOURTH等关键字,可调整列的顺序

  7. 增加数据的原子性——把一列分成两列,如:将(Seattle , WA) 分成不同的两个列

    • 提取字符
    • RIGHT()和LEFT()可以从列中选出指定数量的字符
      SELECT RIGHT(location, 2) FROM my_contacts;
      (RIGHT从列的右侧开始
      2 从列的右侧开始选取的字符数量)
    • 选取逗号前的所有内容SUBSTRING_INDEX()
      SELECT SUBSTRING_INDEX(location, ',', 1) FROM my_contacts;
      (SUBSTRING_INDEX,提取单引号里的字符串,然后取出它前面的所有内容
      , 命令要寻找的逗号
      1表示名利要寻找的第一个逗号,然后提取它前面的所有内容)

    • 将现有列的内容填入新列
      UPDATE my_contacts
      SET state = RIGHT(location, 2);

      (state, 储存州数据的新列
      RIGHT……..提取location列的最后两个字符)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值