本地数据库me_nine,已经导入数据
前言:
*一般而言,主键是一列,但也可以多个列组合作为主键。如果没有主键,更新
删除特定行就极为困难,因为你无法保证操作只涉及相关行
*SQL语言只有很少的词,设计的目的是为了提供一种从数据库中读写数据的简单
有效的方法
*基础SQL通用于所有DBMS,但各家DBMS扩展了一些不同的功能,提供了不同的实现
*SQL关键字大小写都行。表名,列名和值默认都不区分大小写(但可以配置)
*使用*通配符会降低性能
第N章:基本语句
*增加:
*不要使用没有给出列的插入语句,防止后期表结构变化
*删除:
*删除规范,先用select测试删除条件是否正确
*修改:
*查询:
*is null可以判断字段是否为空。但要注意为空,空值,空格三者是不同的
*多个逻辑关系and or 记得用括号分组,保证执行顺序
*子查询,用in有一个好处,可以更动态的构建条件
select * from user where id in(select id from user where id=1);
*模糊搜索 % 通配符不匹配空格。模糊搜索性能不高,不应过度使用
*正则表达式是一个很有用的小工具,MySQL支持部分正则
*使用distinct可以查询没有重复的字段。(查询多个列时,关键字作用域所有的列,
把所有的列看成一个整体)
*查询结果可以使用非检索列排序,也可以使用多个列排序,也可以用desc关键字倒序
select name from user order by id,name desc;
*查询结果可以使用各种函数处理(比如处理文本,数值运算,处理时间),但是不同DBMS语法可能不同
*查询结果汇总函数:COUNT() SUM() AVG() MAX() MIN()
*查询结果分组 group by 、having
*对于多表查询,我们可以用IN,嵌套简单语句去实现多表查询。
我们也可以使用下面连接查询更高效的完成。
*多表查询:
内连接、
*inner join on关键字:select v.vend_id,v.vend_name,p.vend_id,p.prod_name from
vendors v inner join products p on v.vend_id=p.vend_id;
*也可以用简单的等值语法,但建议使用上面的SQL规范: select v.vend_id,v.vend_name,p.vend_id,p.prod_name from
vendors v,products p where v.vend_id=p.vend_id;
外连接、
*left outer join on左连接关键字: SELECT Customers.cust_id, Orders.order_num FROM
Customers LEFT OUTER JOIN Orders ON Customers.cust_id = Orders.cust_id;
*right outer join on右连接关键字:左右其实一样。可以调整from,where表顺序转换。
自连接、
*铁锅炖自己:
SELECT c1.cust_id, c1.cust_name, c1.cust_contact FROM Customers AS c1, Customers AS c2
WHERE c1.cust_name = c2.cust_name AND c2.cust_contact = 'Jim Jones';
自然连接、
*不清楚咯
*组合查询(union all对结果集进行汇总,union自动去掉order_num的重复数据)
select * from orders where order_num=20005 union all
select * from orders where order_num=20005
第N章:性能
*视图为虚拟的表,为了重用SQL,视图创建之后和真是的表一样使用
create view cust_orderNum as
select c.cust_id,count(1) as orderNum from customers c,orders o where c.cust_id=o.cust_id group by cust_id;
*存储过程
*事务
*游标
*高级SQL特性