常用语法
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;
网友评论