MySQL入门学习笔记之一

数据库

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

表:某种特定类型数据的结构化清单。

模式(schema):关于数据库和表的布局以及特性的信息。

列:字段

数据类型:每个表列都有相应的数据类型,限制该列存储的数据。

行:表中记录

主键(primary key):某一列,唯一区分表中的每一行。

SQL:结构化查询语言

使用MySQL

基于客户机-服务器

连接MySQL:主机名、端口、用户名、密码

使用数据库

USE crashcourse; 

显示所有数据库

SHOW DATABASES;

显示数据库中的表

SHOW TABLES;

显示表列

SHOW COLUMNS FROM customers;

等同于
DESC customers;
DESCRIBE customers;

显示广泛的服务器状态信息

SHOW STATUS;

显示创建数据库或表的MySQL语句

SHOW CREATE DATABASE crashcourse;

SHOW CREATE TABLE customers;

显示授权用户(所有用户或特定用户)的安全权限。

SHOW GRANTS;

显示服务器错误或警告消息

SHOW ERRORS;

SHOW WARNINGS;

检索数据–SELECT

检索单个列

SELECT prod_name FROM products;

检索多个列

SELECT prod_id, prod_name, prod_price FROM products;

检索所有列

SELECT * FROM products;

检索不同的行—DISTINCT

SELECT DISTINCT vend_id FROM products;

限制结果

前5行
SELECT prod_name FROM products LIMIT 5;

指定开始行和行数
SELECT prod_name FROM products LIMIT 5,5;

注:
检索出的第1行是行0
LIMIT 3,4 从行3开始,取4行

使用完全限定的列名、表名

SELECT products.prod_name FROM crashcourse.products;

排序检索数据(ORDER BY)

排序检索数据(字母顺序)

SELECT prod_name FROM products ORDER BY prod_name;

按多个列排序

首先按价格排序,再按名称排序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;

指定排序方向

降序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;

以prod_price降序,以prod_name升序(ASC)
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

找出最昂贵的物品值

SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

过滤数据

使用WHERE子句

SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;

注:同时使用ORDER BY 和 WHERE 子句时,应该让ORDER BY 位于WHERE 之后。

WHERE子句操作符:

=、<>、!=  等于/不等于
<<=>、>=
BETWEEN

检查单个值

SELECT prod_name, prod_price FROM products WHERE prod_price <= 10;

范围值检查

SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

空值检查

SELECT prod_name FROM products WHERE prod_price IS NULL;

数据过滤

AND操作符

SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;

OR操作符

SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 OR prod_price = 10;


注:AND计算优先级高于OR.
同时使用AND和OR操作符的WHERE子句,应该使用圆括号分组。

IN 操作符—指定条件范围

找出供应商10021003制造的所有产品
SELECT prod_name, prod_price 
FROM products 
WHERE vend_id IN (1002, 1003) 
ORDER BY prod_name;

等同于
WHERE vend_id = 1002 OR vend_id 1003

IN 与 ALL
INOR执行更快
最大优点,可以包含其他SELECT语句

NOT操作符

SELECT prod_name, prod_price 
FROM products 
WHERE vend_id NOT IN (1002, 1003) 
ORDER BY prod_name;

使用通配符进行过滤

LIKE操作符

百分号%:任何字符出现任意次数,但是不能匹配NULL

区分大小写

SELECT prod_id, prod_name 
FROM products 
WHERE prod_name LIKE 'jet%';


'%anvil%'
's%e'

下划线(_)通配符

只匹配单个字符

SELECT prod_id, prod_name 
FROM products 
WHERE prod_name LIKE '_ ton anvil';

使用正在表达式进行搜索

基本字符匹配

找到prod_name包含文本1000的所有行
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
. 表示匹配任意一个字符

LIKE和REGEXP之间的重要差别:LIKE匹配列值整个串(只匹配部分不返回结果),而REGEXP匹配列值的子串。

匹配不区分大小写。

进行OR匹配

搜索多个串之一

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000 | 2000 | 3000'
ORDER BY prod_name;

匹配几个字符之一

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;

可以得到结果
1 ton anvil
2 ton anvil

[^123]: 除了123外的字符

匹配范围

  • 定义范围
    [1-5]
    [a-z]
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;

匹配特殊字符

匹配特殊字符,需要用\\为前导

SELECT vend_name
FROM vendors
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;

匹配字符类—表示集合

这里写图片描述

匹配多个实例

这里写图片描述

SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;

结果可能是
TNT (1 stick)


匹配连在一起的4位数字

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;

也可使用
WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'

定位符

这里写图片描述

找到以一个数(包括小数点开始的数)开始的所有产品

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;

^ 用在[]中表示反转集合,否则定位串的开始位置。

发布了72 篇原创文章 · 获赞 110 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LIZHONGPING00/article/details/70879481