sql再学习

1、生疏约束
所有的约束加在所有行的最后面,可阅读性更高
列名命名是使用:约束_列名 来命名更加直观:UK唯一,PK主键,FK外键

唯一:unique(列名),所有元素不能相同
外键:foreign key(本表列名) refrences 外表(主键);外键的作用是为了让2个表之间的数据具有一致性,设置了外键之后,从表就不可以拥有主表没有的数据了

2、表连接


并,union,把多个表的查询结果连接起来
select name from test1 UNION select name from test2 如果2个查询的字段不同则新字段名字为第一个查询结果的字段名

笛卡尔积 就是join的结果:select * from test1 join test2 ,笛卡尔积的字段数为 表1的字段数 + 表2的字段数。笛卡尔积的记录数为:表1的记录数 * 表2的记录数。

连接(join):连接以对笛卡尔积为主体,根据相应字段值的比较条件分为3种:
内连接(inner join):只要2个表里面有一个字段是一样,并且那一行的值相等,就返回全行
左连接(left join):就算右表里面没有相匹配的,也返回左表所有行,不匹配那一行其他值为null
右连接(right join):就算左表里面没有相匹配的,也返回右表所有行,不匹配那一行其他值为null
mysql不支持全连接

连接都要给判断条件。不然他就不知道以哪个字段作为判断条件,可以是where,也可以是on


count(column)返回该列的行数,不包括null
avg(column)返回该列的平均数
max(column) 返回最大值 min(column)最小值
sum(column)总数

group by,就是根据某个字段对那些合计函数进行分组
select sum(count)from orders group by name;根据名字对count进行求和,就是名字一样的分数相加,以名字作为分隔

where子句无法跟合计函数一起使用
即:select name from orders where count < avg(count);是错误的,称为组函数的无效使用
可以使用having ,比如查找出count<30的人:
select name,sum(count) from orders group by name having sum(count) <30;

ucase(column) 改成大写 lcase(column) 改成小写

mid(column,strat,amount)返回截取的字段,参数分别是字段名,起始位置,长度

length(column)返回字段的长度

now()返回当前时间

 

posted @ 2017-10-18 16:16  神芝  阅读(131)  评论(0编辑  收藏  举报