SQL学习基础知识

1.SQL不区分大小写

2.SQL每个语句后面都必须加分号

3.SQL可以分为DML(数据库操作语言)和DDL(数据库定义语言)

  DML(查询、更新):SELECT UPDATE DELETE INSERT INTO

  DDL(创建删除表格  也可以创建删除索引):

      CREATE DATABASE  创建数据库

      ALTER DATABASE    修改数据库

      CREATE TABLE     创建表

      ALTER TABLE    变更表

      DROP TABLE    删除表

      CREATE INDEX    创建索引(索引键)

      DROP INDEX   删除索引

SQL SELECT语句:SELECT 列名 FROM 表名; 

          SELECT * FROM 表名;

          例如:SELECT firstNam,lastName FROM  persons;从persons表中获取列名为firstName和lastName的列的值

SQL SELECT DISTINCT语句: SELECT DISTINCT 列名 FROM 表名;

         例如:SELECT DISTINCT firstName,lastName FROM person;从person表中获取列名为firstName和lastName的列的值,排除其中firstName和                lastName都相等的记录

SQL WHERE子句:用于规定查询条件;> < = >= <= <>(不等于) (BETWEEN XX AND XX)  LIKE 

         条件的值如果不是数值,必须加单引号

         SELECT * FROM person WHERE name <> 'name1';

SQL AND和OR运算符:SELECT * FROM person WHERE (firstName = 'name1' OR firstName = 'name2') AND lastName = 'name3';

SQL ORDER BY:对结果集进行排序

          以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT company,orders FROM person ORDER BY company DESC,orders ASC;

INSERT INTO:INSERT INTO person VALUES(value1,value2,....)   INSERT INTO person(colum1,colum2,...) VALUES(value1,value2,....);

UPDATE...SET..:UPDATE demo SET name='name1',company='company2' WHERE id = xx;

DELETE FROM:DELETE FROM person WHERE name='name1';

TOP(SQL SERVER) LIMIT(MYSQL) ROWNUM<XXX---ORACLE:规定返回记录的数量

        SQL SERVER : SELECT TOP 10 * FROM person WHERE name = 'name1'; 

        MYSQL:SELECT * FROM person WHERE name = 'name1' LIMIT 10;

        ORACLE: SELECT * FROM person WHERE name = 'name1' ROWNUM<10;

LIKE:SELECT * FROM person WHERE name LIKE 

SQL通配符:% _  [charlist]符合charlist中的一个 [^charlist]不是charlist中的任一一个 [!charlist]不是charlist中的任何一个([]在mysql中一个也没查出来 在sqlserver中可       以查出来)

      例:查找person表中name以n或m或r开头的name列  SELECT name FROM person WHERE name like '[nmr]%';

SQL IN:SELECT * FROM person WHERE name IN(value1,value2,value3,....);

      例:在person表中选取姓名为name1或name2的人 SELECT * FROM person WHERE name IN('NAME1','NAME2');

BETWEEN ... AND ...:SELECT * FROM person WHERE age BETWEEN '10' AND '20';

NOT:查找条件的相反条件 SELECT * FROM person WHERE age NOT BETWEEN '10' AND '20';

AS:别名(可省略AS)  SELECT * FROM person p where p.age = 20;      

JOIN:table1 JOIN table2 ON             table1 INNER JOIN table2 ON               table1 LEFT JOIN table2 ON            table1 RIGHT JOIN table2 ON

   join 和 inner join是一样的:用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

        例:谁订购了产品,并且他们订购了什么产品?(查询所有人的订购)

        SELECT person.firstNaem,person.rightName,orders.num FROM person JOIN orders ON person.id=order.p_id;

        等价于:SELECT person.firstNaem,person.rightName,orders.num FROM person,orders WHERE person.id=order.p_id;

        

   LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

        例如:我们希望列出所有的人,以及他们的定购。

        SELECT person.firstName,person.rigthName,orders.num FROM person LEFT JOIN orders ON person.id=order.p_id;

        

   RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

        例如:我们希望找出所有的票,以及订购他们的人

        SELECT person.firstName,person.rightName,orders.num FROM person RIGHT JOIN orders ON person.id=order.p_id;

        

   FULL JOIN: 只要其中一个表中存在匹配,就返回行MYSQL不支持full join,可以用left join 和right join分别查出结果再用union组合结果,去掉重复的部分(多             查出了一次两个表都匹配的结果)

        例如:我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人

        SELECT person.firstName,person.lastName,orders.num FROM person FULL JOIN orders ON person.id=order.p_id;

        等价于:SELECT person.firstName,person.lastName.orders.num FROM person LEFT JOIN orders ON person.id = order.p_id union

                SELECT person.firstName,person.lastName.orders.num FROM person LEFT JOIN orders ON person.id = order.p_id;

         

 

UNION:用于合并两个或多个 SELECT 语句的结果集,UNION操作符默认选取不同的值,如果要保留相同的值用UNION ALL

    :UNION两边的SELECT语句必须要查询相同数量的列,并且每个查询的列都必须要有相同的数据类型

    例:

      列出Employees_China和Employees_USA中的E_Name,名字相同的只列一次

      SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA

      

 

posted @ 2013-05-04 20:39  大打气菜鸟  阅读(220)  评论(0编辑  收藏  举报