SQL学习过程中的一些问题

1. 通配符 (wildcard) 当想使用[charlist] 以两个字母开头怎么办,如以AA和BB开头的。
直接用select * from 表 where 字段 like 'AA%' or 字段 like 'BB%'

2. 同样能选取 table 中的两列inor 之间有什么区别。
两者效果完全一样!
IN 后不是子查询而是固定常量值列表时,它最后都会被解释成和OR一模一样的条件,这有两层意思:
一、当IN(条件列表) 中的条件列表是少量值时,它会解释成OR连接,即最后编译成和OR连接一模一样的语句;
二、当IN(条件列表) 中的条件列表很长时,或者你使用OR方法来连接条件并且连接数量很多时,则它们最后的解释效果也是一样的,即都是把条件列表创建为一个哈希表,然后和被查询的表中的行进行对比。
3.left joinright join 多个表怎么办

4. 每个表都应该有一个primary key,并且每个表只能有一个primary key,为什么还能用 CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) 去defining a PRIMARY KEY constraint on multiple columns.
突然发现这个问题好蠢。。。

5. 同样是删除数据 deletedrop 之间有什么区别。

  • dropdelete只是删除表的数据(定义),drop语句将删除表的结构、被依赖的约束(constrain)、触发器 (trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。
  • delete语句是DML语言,这个操作会放在rollback segement中,事物提交后才生效;如果有相应的触发器(trigger),执行的时候将被触发。truncatedrop是DDL语言,操作后即 生效,原数据不会放到rollback中,不能回滚,操作不会触发trigger。
  • delete语句不影响表所占用的extent、高水线(high watermark)保持原位置不动。drop语句将表所占用的空间全部释放。truncate语句缺省情况下将空间释放到minextents的 extent,除非使用reuse storage。truncate会将高水线复位(回到最初)。
  • 效率方面:drop >truncate > delete5.安全性:小心使用droptruncate,尤其是在 没有备份的时候,想删除部分数据可使用delete需要带上where子句,回滚段要足够大,想删除表可以用drop,想保留表只是想删除表的所有数据、 如果跟事物无关可以使用truncate,如果和事物有关、又或者想触发 trigger,还是用delete,如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入、插入数据。
  • delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。 drop一般用于删除整体性数据 如表,模式,索引,视图,完整性限制等delete用于删除局部性数据 如表中的某一元组DROP把表结构都删了DELETE只是把数据清掉 当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

6. 字长为2,mid()取超过范围会怎么样。
超出的地方为空

7. Error Code: 1175. You are using safe update
SET SQL_SAFE_UPDATES = 0;

8.列名有空格怎么办
列名