查询数据: 基本查询:SELECT* FROM [table] 带条件的查询:SELECT* FROM [table] WHERE [column] = [value] 子查询:SELECTa, b, c FROM a WHERE a IN (SELECT d FROM b) 外连接查询:SELECTa.a, a.b, a.c, b.c, b.d, b.f FROM a LEFT OUTER JOIN b ON a.a = b.c 视图查询:SELECT* FROM (SELECT a, b, c FROM a) T WHERE t.a > 1 更新数据: 普通更新:UPDATE[table] SET [column] = [value] 关联表更新:UPDATEA SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID 删除数据:DELETEFROM [table] 删除主表中已经在副表中没有的信息:DELETE FROM table1 WHERE NOT EXISTS (SELECT * FROM table2WHERE table1.field1 = table2.field1) 事务处理: 开始事务:BEGINTRANSACTION 提交事务:COMMITTRANSACTION 回滚事务:ROLLBACKTRANSACTION 结束事务:提交或回滚事务都将结束事务 其他操作: 创建数据库和表:CREATEDATABASE database_name; CREATE TABLE table_name (column1 datatype, column2datatype, ...) 插入数据:INSERTINTO table_name (column1, column2, ...) VALUES (value1, value2, ...) 删除表:DROPTABLE table_name 笛卡尔积 笛卡尔积是一个数学运算。假设有A和B两个集合,则这两个集合的笛卡尔积就是它俩的所有可能组合。 select * from A, B; 假设A表有m行数据,B表有n行数据,那么最终的结果集里就会有m*n行,即所有的组合情况,这就是笛卡尔积。 笛卡尔积在SQL99中又称为交叉连接,即cross join。它的作用是可以把任意表做连接,即使这些表之间并不相关。 select * from A cross join B; 但是事实上直接这样使用笛卡尔积是非常粗暴的,所以我们通常在使用连接的时候还是会加上筛选条件的,即where,这就诞生了下一步要说的等值连接。 等值连接 等值连接的话,就需要两张表有关联了,即需要两表有相同或相似的字段,可以用来做连接时的筛选。 select * from A, B where a.team_id =b.team_id; 可以看到,似乎好像就是在笛卡尔积的基础上加入了筛选条件。 等值连接在SQL99中被称为自然连接,即natural join; 那么问题来了,等值连接运行时,会先产生笛卡尔积,然后再用where条件来过滤吗? 是的,等值连接其实是需要先做笛卡尔积,然后再根据where条件,选择出满足条件的记录组合。 非等值连接 多表关联时,如果连接条件是等号,就是等值连接;其他的运算符就是非等值连接。 select * from A, B where A.heightbetween B.height_lowest and B.height_highest; 外连接 外连接的一大特点是,除了可以查询满足条件的记录以外,也可以搭配null值检查来查询不满足条件的记录。 两张表分主表和从表。 SQL92中采用(+)代表从表所在位置,而且92中只有左外连接和右外连接,没有全外连接。 左外连接,左边的表是主表,显示左边的表的全部行,若右表没有匹配,则右表位置为null。 92标准下: select * from A, B where A.team_id =B.team_id(+) 相当于SQL99中: select * from A left join B onA.team_id=B.team_id; 右外连接,右边的表是主表,显示右边的表的全部行,若左表没有匹配上,则左表位置为null; 92标准下: select * from A, B where A.team_id(+) =B.team_id 相当于SQL99中: select * from A right join B onA.team_id=B.team_id; 92标准中不存在left join和right join。 全外连接:结合了left join和right join的结果,其实就是两表关联取并集。在99标准中的语法是A full join B或者是A full outer join B 这里可以考虑一下两表取并集之后去掉交集,如何使用full join来写 MySQL中未提供full join写法,但oracle提供。 内连接:两表关联取交集。 自连接 指自己连接自己。查询时用到了自己的字段 select b.player_name from A a, A b wherea.player_name='赫韦德斯' and a.height < b.height 1 查看比赫韦德斯高的球员。 这个用join也能实现: select b.player_name from A a join A b on a.player_name='赫韦德斯' and a.height < b.height 其他 sql99中还提供了一种using连接,在进行连接时,可以用using指定数据表中的同名字段进行等值连接,比如: SELECT player_id, team_id, player_name,height, team_name FROM player JOIN team USING(team_id) 相当于: SELECT player_id, player.team_id,player_name, height, team_name FROM player JOIN team ON player.team_id = team.team_id --销售订单总额-- SELECT FALLAMOUNT 销售订单总额 FROMT_SAL_ORDERENTRY_F where Fid=100005; select FCOSTAMOUNT from T_SAL_OUTSTOCKENTRY_F WHEREFID=100004; --销售出库明细关联表-- select *from T_SAL_OUTSTOCKENTRY_LK FSTABLENAME --源单表名-- T_SAL_DELIVERYNOTICEENTRY T_SAL_DELIVERYNOTICEENTRY T_SAL_CONSIGSETTENTRYROW T_SAL_CONSIGSETTENTRYROW T_SAL_ORDERENTRY T_SAL_ORDERENTRY
|