mysql语句

2022-04-13  本文已影响0人  青乌

常用语法

create database - 创建新数据库
alter database - 修改数据库
create table - 创建新表
alter table - 变更(改变)数据库表
drop table - 删除表
create index - 创建索引(搜索键)
drop index - 删除索引

select - 从数据库中提取数据
update - 更新数据库中的数据
delete - 从数据库中删除数据
insert into - 向数据库中插入新数据

创建新数据库:create database
create database name
创建新表:create table
create table if not exists users(
     id INT NOT NULL AUTO_INCREMENT,
     name VARCHAR(100) NOT NULL,
     pass VARCHAR(100) NOT NULL,
     avator VARCHAR(100) NOT NULL,
     moment VARCHAR(100) NOT NULL,
     PRIMARY KEY ( id )
)

数据库检索

语法顺序
select - 选择列
from - 目标表
where - 条件判断
group by - 分组
having - 过滤分组
order by - 排序
limit - 行限制

1. 检索:select + from

检索列: users 表的 name 列
SELECT name FROM users

检索多列: users 表的 name + id 列
SELECT name, id FROM users

检索所有列: users 表的所有列
SELECT * FROM users

DISTINCT:重复的行只显示一次
SELECT DISTINCT id FROM users

2. 条件限制:where

操作符
= 、!= 、< 、> 、<= 、>= 、BETWEEN AND( 在指定的两个值之间)

空值检查:
IS NULL:列值为 NULL,返回 true。
IS NOT NULL:列值不为NULL,返回 true。
<=>:两个值都为 NULL ,返回 true。

WHERE price = 1000;
WHERE price != 1000;

WHERE price IS NULL;
WHERE price IS NOT NULL;

AND&OR:
AND表示同时满足所有条件,OR表示满足所有的单个条件
优先处理AND, 后处理OR。要先处理OR,应该加()

WHERE id = 1003 AND price <= 10;
WHERE id = 1002 OR price = 10;
WHERE id = 1002 OR id = 1003 AND price = 10;
WHERE (id = 1002 OR id = 1003) AND price = 10;

IN指定条件范围,NOT IN可以用来取反

WHERE id IN (1002, 1003)
WHERE id NOT IN (1002, 1003)

LIKE子句+通配符 %、 _
%表示任何字符串出现任意次数,区分大小写
_表示任何字符串出现单次,区分大小写

#检索以jet起头的产品名字
WHERE prod_name LIKE 'jet%';
# 检索产品名字中任意位置有care字符
WHERE prod_name LIKE '%care%';
# 检索产品名字中以s开头e结尾的字符,长度不限
WHERE prod_name LIKE 's%e';

正则表达式REGEXP

WHERE prod_name REGEXP '1000'
WHERE prod_name REGEXP '.000'
WHERE prod_name REGEXP '1000|2000'
WHERE prod_name REGEXP '[1|2|3]TON'
3. 分组:group by

不同供应商包含的产品计数并分组

GROUP BY id;
4. 过滤分组:having

检索买了2次以上的客户,此处不能用WHERE

HAVING COUNT(*) >= 2;
5. 排序:order by

排序:用name的字母顺序排序
SELECT name FROM users ORDER BY name;

多列排序:先用价格排序,再用名称排序
SELECT id, price, name FROM products ORDER BY price, name;

降序:无说明默认升序,降序需要用DESC(descrease)加以说明
SELECT id, price, name FROM products ORDER BY price DESC;

多列降序:在多个列上进行降序,需要对每个列都进行DESC说明
SELECT id, price, name FROM products ORDER BY price DESC, name;

6. 行限制:limit

0-4行限制:检索开始的5行
SELECT id FROM users LIMIT 5;

5-10行限制:检索第6行开始的5行
SELECT id FROM users LIMIT 6, 5;

值计算

1. Concat() 拼接,将值联结到一起构成单个值

字符串拼接
select concat(str1,str2...)

把两列合并为一列
select concat(vender, country) as vend

2. AS赋予联结后的单个词一个别名

title由name-country拼成
SELECT Contact(name, '-',country) AS title

3. 文本处理方法

Left() - 左边的字符串
Right() - 右边的字符串
Length() - 字符串的长度
Locate() - 找出串的一个子串
SubString() - 子串的字符
Soundex() - 字符串的SOUNDEX值(类似发音的字符串)
RTrim() - 删除右边多余的空格
LTrim() - 删除左边多余的空格
Upper() - 转为大写
Lower() - 转为小写

4. 日期和时间处理方法

Date() - 一个时间的日期
Time() - 一个日期的时间
Year() - 一个时间的年份
Month() - 一个时间的月份
Day() - 一个时间的天数
Hour() - 一个时间的小时
Minute() - 一个时间的分钟
Second() - 一个时间的秒钟
Now() - 当前日期和时间
AddDate() - 增加一个日期
AddTime() - 增加一个时间

5. 算数计算

基本运算: + - * /

数学方法:
Abs() - 绝对值
Sqrt() - 平方根
Rand() - 随机数
Pi() - 圆周率
Exp() - 指数值
Mod() - 余数
Cos() - 余弦值
Sin() - 正弦值
Tan() - 正切值

AVG() - 平均值
COUNT() - 计数
MAX() - 最大值
MIN() - 最小值
SUM() - 求和

# COUNT(*) AS cust_num, 对所有列进行计数的,但是只返回cust_num里的计数结果
# COUNT(*)对所有进行计数,COUNT(column)对除掉NULL的列进行计数

# 求客户数量
SELECT COUNT(*) AS num_cust
# 求有邮箱的客户数量
SELECT COUNT(email) AS num_cust

子查询

不推荐

SELECT cust_info

FROM customers

WHERE cust_id IN (

SELECT cust_id

FROM orders

WHERE oder_num IN(

SELECT order_num

FROM orderitems

WHERE prod_id = 'TNT2'));

联结表

从2个关系表中导出数据
FROM products, vendors WHERE products.vend_id = vendors.vend_id

INNOR JOIN...ON内部联结-上述的第二种写法
FROM products INNER JOIN vendors ON products.vend_id = vendors.vend_id;

自联结:把1个表别名成2个表
SELECT p1.id, p1.name FROM products AS p1, products AS p2

自然联结:关系表中有一样的列,通过表别名和筛选,使每个列只返回一次
* 通配符只对c表使用,其他表的重复列没有被检索出来
SELECT c*, o.order FROM customers AS c, orders AS o

外部联结: LEFT OUTER JOIN...ON表示从左边的表中选择所有行
SELECT customers.cust_id, orders.order_num FROM customers
LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

使用带聚集函数的联结:
内部联结,表之间相等的行联结
SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS ord_num FROM customers INNER JOIN orders
ON customers_cust.id = orders.cust_id
GROUP BY customers_cust.id;
外部联结,表之间有不相关联的行联结
SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS ord_num FROM customers LEFT OUTER JOIN orders
ON customers_cust.id = orders.cust_id
GROUP BY customers_cust.id;

上一篇下一篇

猜你喜欢

热点阅读