MySQL必知必会之1

来源:互联网 发布:删除的sql语句怎么写 编辑:程序博客网 时间:2024/05/19 19:59

数据库

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

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

模式(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行是行0LIMIT 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 1003IN 与 ALLINOR执行更快最大优点,可以包含其他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_nameFROM productsWHERE prod_name REGEXP '1000'ORDER BY prod_name;SELECT prod_nameFROM productsWHERE prod_name REGEXP '.000'ORDER BY prod_name;. 表示匹配任意一个字符

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

匹配不区分大小写。

进行OR匹配

搜索多个串之一

SELECT prod_nameFROM productsWHERE prod_name REGEXP '1000 | 2000 | 3000'ORDER BY prod_name;

匹配几个字符之一

SELECT prod_nameFROM productsWHERE prod_name REGEXP '[123] Ton'ORDER BY prod_name;

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

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

匹配范围

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

匹配特殊字符

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

SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'ORDER BY vend_name;

匹配字符类—表示集合

这里写图片描述

匹配多个实例

这里写图片描述

SELECT prod_nameFROM productsWHERE prod_name REGEXP '\\([0-9] sticks?\\)'ORDER BY prod_name;

结果可能是
TNT (1 stick)


匹配连在一起的4位数字

SELECT prod_nameFROM productsWHERE prod_name REGEXP '[[:digit:]]{4}'ORDER BY prod_name;也可使用WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'

定位符

这里写图片描述

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

SELECT prod_nameFROM productsWHERE prod_name REGEXP '^[0-9\\.]'ORDER BY prod_name;

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

0 0