《sql必知必会》学习记录

1和2和3章:

ORDER BY line1,line2 DESC/ASC

排序,order用在 select语句的最后一行

LIMIT 5 OFFSET 5

从第5条开始取5条


4和5过滤数据

.where语句操作

=等于>大于
<>不等于>=大于等于
!=不等于!>不大于
<小于BETWEEN两个值之间
<=小于等于 IS NULL为null值
!不等于IN

AND优先级比OR大,用()括号确定优先级

NOT操作符不单独使用,否定后面跟的任何条件

例如:SELECT * FROM product WHERE NOT vendid='DLL01';

NOT和IN语句在子查询中十分有用


6.通配符

用LIKE匹配时,%可匹配多个字符,_为一个字符,[]里为字符集


7.计算字段

CONCAT()用于连接,TRIM()用于去掉空格,NOW()当前时间,列类型为数字时可用+-*/

例如:SELECT CONCAT(name, '(' , contry , ')' ) FROM vendors;

AS 

SELECT NAME AS '姓名' FROM HW_NAME;


8.使用数据处理函数

 SUBSTRING()取子串,CONVERT()类型转换,UPPER(),LOWER(),LENGTH(),TRIM()

CURDATE(),YEAR()

ABS(),EXP(),SQRT()


9.汇总数据

AVG(),COUNT(),MAX(),MIN(),SUM()

AVG()忽略null的行,聚集函数默认ALL,可用DISTINCT

AVG(DISTINCT price) AS 价格


10.分组数据

GROUP BY

HAVING

HAVING支持所有的where操作,where相当于分组前过滤,having是分组后过滤


11.运用子查询进行过滤

SELECT cust_name,cust_contact

FROM Customers

WHERE cust_id IN (SELECT cust_id

FROM Order

WHERE order_num ='1');

格式


12和13.联结表

INNER JOIN 等值联结,把不匹配的不显示

使用表别名SELECT CONCAT(TRIM(vend_name),'(',vend_contry,')') AS title FROM vendor ;

还有LEFT JOIN ,RIGHT JOIN.形成笛卡尔乘积形式

用联结时,要用on进行选择


14.组合查询

UNION组合多条SQL语句。

如想获得名叫‘james’的数据和家在'UN'的人的数据,也可用OR来获得,当表多时UNION可以体现优势

 UNION从查询结果集中自动去除了重复的行。

想要重复的话用UNION ALL。


15.插入数据

INSERT INTO Customers(cu_id,cu_name) VALUES('100','ysg');指定行,提高可移植性

从其他表插入INSERT INTO Customers(name,age) SELECT aname,grade FROM CustNew;


16.更新和删除数据

UPDATE Cust_order

SET name='ysg' where id=12;

DELETE FROM CUST WHERE ID=13;更新和删除都要用where,否则就会导致全部变化。

TRUNCATE TABLE Cust;更快速的全删表的内容。因为不记录数据的变动


17.创建表更改表

CREATE TABLE Order(

num char(20) not null default 1;

);

ALTER TABLE Order

ADD name char(20);

 

ALTER TABLE Order

DROP COLUMN name;


18.使用视图

CREATE VIEW Orderview AS 

SELECT * FROM ORDER 

WHERE name='ysg';方便,简化操作

重用sql语句,保护数据.视图不能索引.


19.使用存储过程

封装,简化客户端操作,安全,存储过程以编译过的形式存储提高性能

CALL AddNewPro('ysg',12,23);


下面是一个使用OUT参数的简单的存储程序的例子。例子为,在 程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在 程序体中的;定界符被传递到服务器而不是被mysql自己来解释。

mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; 
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a;
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

OUT param1 INT的意思是,param1的是向外传参,IN是向内传参,INOUT是既向内也向外传参。
 INTO param1 进入param参数。

[begin_label:] BEGIN
    [statement_list]
END [end_label]

存储子程序可以使用BEGIN ... END复合语句来包含多个语句。statement_list 代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。

复合语句可以被标记。除非begin_label存在,否则end_label不能被给出,并且如果二者都存在,他们必须是同样的。


20.事物管理

START TRANSACTION或BEGIN语句可以开始一项新的事务。COMMIT可以提交当前事务,是变更成为永久变更。ROLLBACK可以 回滚当前事务,取消其变更。SET AUTOCOMMIT=0语句可以禁用autocommit模式,用于当前连接。

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

SAVEPOINT step1;占位符,可用于部分回退。ROLLBACK TO step1;


21.使用游标

游标检索结果集,相当于迭代器。只读,不能删改。

并不适合web开发。


22.高级SQL特性

 外键:引用完整性,数据安全

唯一约束:值唯一,UNIQUE

检查约束:例CHECK(num>0)只能大于0,content CHECK(content LIKE '[MK]')只能是M或K

索引:排序数据以加快搜索和排序操作的速度。索引改善查找速度,但降低数据插入,修改删除的性能;索引数据要占据大量空间。CREATE INDEX prod_name_ind ON Product(pro_name);索引列只能是一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值