SQL必知必会 记录

登录数据库
mysql -u root -p
查看所有数据库  show databases;
选择数据库  use 数据库名;
查看所有表      show tables
查看表结构      describe 表名



检索数据
1、SELECT语句
2、检索单个列
SELECT 列名  FROM 表;
3、检索多个列
SELECT prod_id,prod_name,prod_price
FROM Products;
4、检索所有列
SELECT * FROM Products;


排序检索数据 ORDER BY
1、排序数据
SELECT PROD_name
FROM Products
ORDER BY prod_name;
2、按多个列排序
SELECT prod_id,prod_name,prod_price
FROM Products
ORDER BY prod_price,prod_name;
3、按照位置排序
SELECT prod_id,prod_name,prod_price
FROM Products
ORDER BY 2,3;
4、指定排序方向
SELECT prod_id,prod_name,prod_price
FROM Products
ORDER BY prod_price DESC,prod_name;  DESC 降序


过滤数据
1、使用WHERE字句
SELECT prod_id,prod_name,prod_price
FROM Products
WHERE pro_price = 3.49;
ORDWE BY 位于WHERE后
2、WHERE子句操作符
=  <>  !=  <  <=  !<  >  >= !> BETWEEN  IS NULL
范围检查  WHERE prod_price BETWEEN 5 AND 10
空值检查                   IS NULL


高级数据过滤
1、组合WHRER子句  使用AND 和OR,AND优先级高
2、IN操作符   和OR有相同的功能
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')
可以包含其他SELECT语句
3、NOT操作符(MYSQL只用来否定EXISTS)


用通配符进行过滤
1、LIKE操作符
% 任何字符出现任意次数
_ 只匹配1个字符
[] 指定字符集 (mysql不支持)
2、通配符不应过分使用,速度较慢


创建计算字段
1、计算字段是运行时在SELECT语句内创建
2、concatenate 拼接 将值连结到一起构成单值
使用+ 部分数据库使用||
mysql都不支持,使用CONCAT()函数
select concat(first_name,'.',last_name),emp_no  
from employees
where emp_no < 10010;
使用别名
字段或值的替换名
mysql> SELECT CONCAT(first_name ,last_name) AS full_name
    -> FROM employees
    -> WHERE emp_no < 10010
    -> ORDER BY full_name;
3、执行算术计算
SELECT pro_id,quantiy*item_price AS expanded_price
FROM OrderItems
基本算数操作符 + - * /


使用函数
1、使用函数存在不同数据库之间的移植性问题。
2、函数
文本处理函数
LOWER()
UPPER()
LENGTH()
LTRIM()
RTRIM()

日期处理函数
移植性差
数值处理函数
ABS()、COS()、SIN()、TAN()、
EXP()指数 PI()返回园周率 SQRT()返回平方根


汇总数据
1、聚集函数
AVG() 平均值
COUNT()某列行数
MAX()某列最大值
MIN()最小值
SUM()某列值之和
2、聚合不同值
SELECT COUNT(DISTINCT birth_date)  
FROM employees
where MONTH(birth_date )= 2;
DISTINCT 只包含不同的值
3、组织聚合函数
SELECT可以包含多个聚合函数


分组数据
1、创建分组
GROUP BY  必须出现在WHERE子句之后
例子
SELECT birth_date ,COUNT(*)  
FROM employees
WHERE birth_date > '1965-01-01'
GROUP BY birth_date
2、过滤分组
HAVING  与WHERE字句用法相似,用于分组
例子
SELECT birth_date ,COUNT(*)  
FROM employees
WHERE birth_date > '1965-01-01'
GROUP BY birth_date
HAVING COUNT(*) >60;
3、分组和排序
GROUP BY 和ORDER BY 配合使用


使用子查询
1、在WHERE语句中使用SELECT
SELECT CONCAT(first_name ,'.',last_name) AS name
FROM employees
WHERE emp_no IN (SELECT emp_no
FROM titles
WHERE title ='Manager');
2、作为计算字段使用子查询

 

 

联结表
1、联结
关系表
主键
2、创建联结  所有的联结都有WHERE子句
SELECT first_name ,last_name,title
FROM employees,titles
WHERE employees.emp_no = titles.emp_no  AND title = 'Manager';
等值联结或内部联结,基于两表之间的等值测试


创建高级联结
1、使用表别名 只在查询中使用,不返回客户机
SELECT first_name ,title
FROM employees AS E,titles AS T
WHERE E.emp_no = T.emp_no
AND E.emp_no < 10010;
2、使用不同类型的联结
自联结
同一个表取不同的别名
自然联结
排除相同的列多次出现,,每个列只返回一次。
外部联结
SELECT Customer.id,Order.order_num
FROM CUstomer LEFT OUTER JOIN Order
ON Customer.id =Order.id   左联结
右联结RIGHT
完全联结 full join
交叉联结 迪卡尔积


组合查询
1、创建组合查询
使用UNION  SELECT语句使用UNION隔开
每个查询必须包含相同的列,表达式或聚集函数
UNION查询结果集自动去除重复行  UNION ALL 不取消重复行
2、组合查询结果
只能使用一条ORDER BY 在最后一条SELECT语句后


插入数据
1、插入完整行
mysql> INSERT INTO blog_blogspost
    -> VALUES('2',
    -> 'insert',
    -> 'hehehehehehehe',
    -> '2016-08-18 00:00:00',
    -> 'test'
    -> );
安全插入方法
INSERT INTO blog_blogspost
(id,title,body,timestamp,tag)
VALUES('3', 'insert', 'hehehehehehehe', '2016-08-18 00:00:00', 'test' );
3、插入检索出的数据
INSERT INTO Customers(id,email)
SELECT id,email
FROM CustNew;


更新和删除数据
UPDATE DELETE
1、更新数据  UPDATE
UPDATE 一定要使用WHERE作为过滤行,否则全部更新
mysql> UPDATE blog_blogspost
    -> SET body = 'update test'
    -> WHERE id = 1;
2、删除数据 DELETE
mysql> DELETE
    -> FROM blog_blogspost
    -> WHERE id = 3;
3、删除和更新前使用SELECT验证是否正确。


创建和操纵表
1、创建表
CREATE TABLE 表名

    id  类型  NOT NULL,
    name 类型  NOT NULL DEFAULT tom
);
NULL 为默认设置  DEFAULT 默认值
mysql获得系统日期CURRENT_DATE()
2、更新表
增加列 所有DBMS都支持
其他删除、更改、重命名列不同一
增加列
mysql> ALTER TABLE copy
    -> ADD phone_name char(13);


删除表
DROP TABLE 表名;
DROP TABLE auth_user;


重命名表
RENAME  TABLE copy To coppy;


使用视图
感觉像函数。
优点:1)重用SQL语句,简化SQL操作
      2)使用表的组成部分,保护数据
      3)更改数据格式和表示

性能问题:使用大量视图应对性能进行测试
CREATE VIEW 视图名 AS
正常检索语句;


使用存储过程








    

posted @ 2016-08-17 15:37  hb91  阅读(151)  评论(0编辑  收藏  举报