JOE个人网站

JOE个人网站,不仅仅是一个网站,更像是一个展现自我的平台,致力于让朋友们都可以
有所感触,有所收获。

小知识笔记

2017-12-18 17:55:26
#  只罗列不重复的(字段)
      select distinct name from users;

#  between,之间,包含首尾
      select * from users where id between 2 and 6;
      包括2和6;

#  inner join = join 内连接	只当有匹配才返回
      left join	无论有无匹配	返回左边表所有
      right join	无论有无匹配	返回右边表所有
      full join	全表返回

#  union	(默认会去掉重复数据)
      操作合并两个或多个select 语句
      select name from table1
      union
      select name from table2;
      order by 只难写在最后,而且是对结果进行统一排序,所以两表查询字段数要一样(结果会按字段序号直接写到table1查询字段后面);
      如果想要union 与 order by 共存,可以这样操作:
      "select name from (select name from users where name >=5 order by name asc) as name1 
      union 
      select name from (select name from users where name < 5 order by name desc) as name2";

#  复制表或者字段到另一个已经存在的表
      insert into table2(field1,field2) select value1,vaue2 from table1;

#  in(0) 在某些环境下会被忽略,要用in(-1)
      更新表a字段name值等于表b的name值,条件是a表中b_id等于表b的id值
      update table_a,table_b set table_a.name=table_b.name where table_a.b_id=table_b.id;

#  导入数据库
      $sql="LOAD DATA INFILE '".$file."' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'(`time` , `md5`)";

#  嵌套查询 
      查询前提:tables表的id是父表,reservs表是子表,它里面有一个外键是tableId,对应table表中的id;
      查询需求:通过时间范围查出reservs表中在这个范围内的时间对应的tableId;再通过table表查询不在刚查出的tableId内的所有其他id的信息,并返回;
      SQL语句设计:
      $sql = "SELECT tables.name FROM tables WHERE tables.id NOT IN (SELECT tableId FROM reservs WHERE arriveDateTime 
      BETWEEN '".$lefttime."' and '".$righttime."')";

#  多表查询:今天使用的,表A数据要,表B是表A子表,当外键存在,就要,不存在就返回空,C表同B表; 
      SELECT A.id,A.name,B.good,C.title FROM A LEFT JOIN B ON A.bId = B.id    LEFT JOIN C ON A.cId = C.id    WHERE A.id=:id;

#  外键:
      建表时:字段类型与父表一致:
      categoryId INT UNSIGNED,    (同样的INT UNSIGNED)
      KEY categoryId(categoryId),
      CONSTRAINT category_id FOREIGN KEY (categoryId) REFERENCES CATEGORIES (id)
      建表后:alter   table   StatType   add   constraint   FK_1   foreign   key   (StatTypeID)   references  父表名 (StatTypeID)

      alter table CATEGORIES add foreign key(Printer_id) references PRINTERS(id)
      KEY `PrinterId`(`PrinterId`),
      CONSTRAINT `Printer_id` FOREIGN KEY (`PrinterId`) REFERENCES `PRINTERS` (`id`)

      创建外键的表和原表字段类型要完全一样,包括长度,否则会报errno150错误;
      如原user表ID为id int unsigned not null,
      外键表为userId int unsigned,

      UNSIGNED
      KEY PrinterId(PrinterId),
      CONSTRAINT PrinterId FOREIGN KEY (PrinterId) REFERENCES PRINTERS (id)