SQL基础控制

使用CMD命令控制操作MySQL数据库

  • 登录mysql

语法: mysql -h 数据库地址 -u 用户名 -p登录密码

mysql -h 127.0.0.1 -u root -p123456
  • 显示所有数据库
show databases;
  • 使用数据库

语法: use 数据库名

 use mysql
  • 显示当前数据库的所有表
show tables;

常见错误

mysql服务未启动

ERROR 2005 (HY000): Unknown MySQL server host 'locathost' (2)

到 服务 应用 搜索mysql 启动服务

image-20221027162825419

sql语法错误-代码1064

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'selest cust_name from customers' at line 1

解决办法

  1. 找到关键字 near
  2. 根据near后面的提示 找到语句对应的位置
  3. 错误会出现在位置的前面或后面
  4. 根据sql语法去排除错误

sql语法错误-1064

数据库找不到表-代码1146

1146 - Table 'yourselfsql.customerss' doesn't exist

解决办法

​ 表名错了!!!

表找不到列-代码1054

1054 - Unknown column 'cust_names' in 'field list'

解决办法

​ 不知道列啊!!!

使用Navicat创建数据库

使用Navicat创建数据库

数据库概念

​ 保存有组织的数据的容器(通常是一个文件或一组文件)

数据库软件应称为数据库管理系统(或DBMS):数据库是通过DBMS创建和操纵的。

SQL分类

DDL:数据定义语言(操作数据库、表)

​ 数据定义语言(Data Definition Language,DDL)是 SQL 语言集中负责数据结构定义与数据库对象定义的语言。

​ 关键字:create、drop、alter

CRUD(Create, Read, Update, Delete),即增删改查。

DML:数据操作语言(增删改表中的数据)

​ 数据操纵语言(Data Manipulation Language, DML)是用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。

关键字:insert、delect、update

DQL:数据查询语言(查询表中的数据)

​ 关键字:select、where

DCL:数据库控制语言(授权)

数据控制语言 (Data Control Language, DCL) 是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。

核心指令: grant、revoke

TCL:事务控制语言

​ 事务控制语言 (Transaction Control Language, TCL) 用于管理数据库中的事务。这些用于管理由 DML 语句所做的更改。它还允许将语句分组为逻辑事务。

TCL 的核心指令是 COMMIT、ROLLBACK。

表的概念

是一种结构化的文件,可用来存储某种特定类型的数据。

表在我们程序中跟类相似,相互挂钩(实体类)

表的字段是我们类中的属性(一一对应)

表的每一行是我们类的对象

表名(table)

  • 在同一个数据库下表名唯一
  • 表名、字段名必须使用小写字母或数字,禁止出现数字开头禁止两个下划线中间只出现数字。
  • 表名不使用复数名词
  • 主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名
  • 小数类型为 decimal,禁止使用 float 和 double
  • 表必备三字段:id,create_time(创建时间),update_time(修改时间)

说明:

其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time,update_time 的类型均为datetime 类型,如果要记录时区信息,那么类型设置为 timestamp。

列(column)

​ 表中的一个字段。所有表都是由一个或多个列组成的。

数据类型

​ 每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。

mysql数据类型

mysql数据类型
范围(有符号)范围(无符号)
int(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
BIGINT(大整数)(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)
DECIMAL (6,2)--小数值DECIMAL(M,D) --M(决定整数位的位数),D(决定小数位的位数)
DATE (时间类型)YYYY-MM-DD 年-月-日
DATETIME (时间类型)YYYY-MM-DD HH:MM:SS 年-月-日 时:分:秒
TIMESTAMP ( 时间戳)1970-01-01 00:00:00到现在一个毫秒数 2147483647000
CHAR (10)--字符串固定长度的字符串
VARCHAR(10)--字符串可变长度字符串

行(row)

  • 表中的一个记录。
  • 一行表示一个实体。

主键(primary key)

一列(或几列),其值能够唯一标识表中每一行。

主键不能重复

满足以下条件:

  • 主键不能重复
  • 每一行都必须具有一个主键值(主键列不允许空值 NULL);
  • 主键列中的值不允许修改或更新;
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

SQL概念

​ SQL(发音为字母 S-Q-L 或 sequel)是 Structured Query Language(结构化查询语言)的缩写。SQL 是一种专门用来与数据库沟通的语言。

SELECT查询

从一个或多个表中检索信息

语法:

​ select 字段1[,字段2,字段3.....] from 表名

​ [where 条件]

​ [group by 分组字段]

​ [having 分组条件]

​ [order by 字段 排序规则]

​ [limit 起始位置,显示行数]

MySQL中分号(;)的作用:作为一句完整的SQL语句的结束。

SQL语句和大小写:SQL不区分大小写,但表名,列名以及值可能不同
表名,列名取名采用小写的字母或数字

通配符():查询所有列的信息 select from 表名;

DISTINCT 关键字: 保留不同的值(去重)

SELECT vend_id FROM Products;

列

SELECT DISTINCT vend_id FROM Products;

列2

位置:使用 DISTINCT 关键字,它必须直接放在列名的前面。

LIMIT限制结果(控制显示行数)

​ 在mysql使用的是LIMIT

语法:

​ LIMIT 第几行,显示几条--LIMIT 5,10

​ 第几行从0行开始算起

limit的分页应用

显示第一页一页显示5条 LIMIT 0,5;

SELECT * FROM orderitems LIMIT 0,5;

显示第二页一页显示5条 LIMIT 5,5;

SELECT * FROM orderitems LIMIT 5,5;

显示第三页一页显示5条 LIMIT 10,5;

SELECT * FROM orderitems LIMIT 10,5;

显示第n页一页显示5条 LIMIT (n-1)*5,5;

SELECT FROM orderitems LIMIT (n-1)5,5;

分页计算公式

分页显示limit数值计算公式

LIMIT (第几页-1)*显示条数,显示条数;

注释

 --  这是注释  注意:--后面有个空格
    #    这也是注释
    /**/ 这是多行注释以/*开头 */结尾   

ORDER BY(排序)

概念:ORDER BY 子句取一个或多个列的名字,对此输出进行排序

ORDER BY 通过非选择列进行排序(可以使用不是查询列的其它列来进行排序)示例代码如下。

SELECT prod_name from products
ORDER BY prod_desc

多列排序

用","号区分多列

●按照字段先后顺序进行排序

​ 示例代码

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price,prod_id;

多列排序

指定排序方向

ORDER BY 默认使用ASC升序排序(从小到大)

DESC 降序排序(从大到小)

多列排序每列需要降序,每列都加需要加关键字.

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC; 

排序方向

WHERE 子句(条件检索)

指定搜索条件提取表数据的子集

where子句的操作符

操作符

使用示例:列出所有价格小于 10 美元的产品

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;

何时使用引号

​ 如果将字符串类型的列进行比较,就需要限定引号。

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';

​ 如果是列与列进行比较,不需要引号。

BETWEEN范围值检查

BETWEEN必须指定最低值最高值,匹配范围中所有的值,包括指定的最低值和最高值.

 示例:检索价格在 5 美元和 10 美元之间的所有产品  
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10; 
#与 WHERE prod_price >=5 and prod_price <=10 是一样的

空值检查

NULL 无值(no value),它与字段包含 0、空字符串或仅仅包含空格不同。

    • 使用 IS NULL 去判断是否有空值
    • 使用 IS NOT NULL 去排除空值

    示例代码 检索cust_email 列包含的 NULL 值

SELECT cust_name
FROM Customers
WHERE cust_email IS NULL; 

检索数据为null或空字符的值

SELECT vend_id,vend_state
FROM vendors
WHERE vend_state IS NULL or vend_state='';

把某个值修改成null值

UPDATE vendors SET vend_state = null WHERE vend_id = 'FNG01'

AND操作符 (和)

AND作用:同时满足多个条件

检索由供应商 DLL01 制造且价格小于等于 4美元的所有产品 的名称和价格。

SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;

OR操作符 (或)

or作用:满足其中一个条件

SELECT vend_id,prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';

IN 操作符 (区间)

​ in作用:指定条件范围,范围中的每个条件都可以进行匹配。

SELECT vend_id,prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')

NOT 操作符 (取反)

​ not作用: WHERE 子句中用来否定其后条件的关键字

​ 检索除vend_id为DLL01之外的结果

示例代码:

SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

排除 DLL01 和 BRS01

SELECT vend_id,prod_name, prod_price
FROM Products
WHERE vend_id not IN ('DLL01','BRS01')

排除 3块到10块

SELECT vend_id,prod_name, prod_price
FROM Products
WHERE prod_price not BETWEEN 3 and 10

EXISTS 关键字

EXISTS 概念:判断是否有存在的值
在建表时使用:判断改表是否存在,若存在返回true,不存在返回false

建表:

# 若存在该表则删除表,再创建新表
DROP TABLE IF EXISTS `products`
CREATE TABLE `products`(
  # 省略其字段...
);

在查询where后使用:判断子查询是否有值,若有值返回true,没值返回false

查询:

#  判断子查询有没有值 没有值直接返回空
select * from products where exists(select id from products where id = 9);

not exists:当子查询和主查询有关联条件时,相当于从主查询中去掉子查询的数据 与not in结果一致

select * from test c where  not exists
(select 1 from test t where t.id= '1'  and t.id = c.id)

Like 模糊查询

通配符 _ %

_ 匹配一个字符

        • 匹配某年某班

​ _年_班

        • 匹配姓李的三个字人名

​ 李__

        • 匹配姓丁的二个字人名

​ 丁_

匹配两个字符:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

​ % 匹配任意多个字符

匹配Fish开头的字符串:

SELECT prod_id, prod_name 
FROM Products 
WHERE prod_name LIKE 'Fish%';
  • 匹配2022年7月份生日的人

​ 2022-7-% 2022-07-__

  • 匹配138开头的电话号码

​ 138%

  • 模糊查询某个字段是否包含text值

​ %text%

  • not like 不像啥嘛
  • %不会匹配null值
最后修改:2022 年 11 月 09 日
如果觉得我的文章对你有用,请随意赞赏