精华内容
下载资源
问答
  • mysql 查询语句汇总学习

    万次阅读 多人点赞 2018-10-25 11:08:37
    数据库的操作作为计算机行业的必备技能,这里将用的最多的数据库查询语句汇总到这里(参考链接:https://blog.csdn.net/github_37767025/article/details/67636061),供大家交流学习 (一)单表查询 1.查询一张表...

    数据库的操作作为计算机行业的必备技能,这里将用的最多的数据库查询语句汇总到这里(参考链接:https://blog.csdn.net/github_37767025/article/details/67636061),供大家交流学习

    (一)单表查询

    1.查询一张表:     select * from 表名;

     

    2.查询指定字段:select 字段1,字段2,字段3….from 表名;

     

    3.where条件查询:select 字段1,字段2,字段3 frome 表名 where 条件表达式;

    例:select * from t_studect where id=1;

           select * from t_student where age>22;

     

    4.带in关键字查询:select 字段1,字段2 frome 表名 where 字段 [not]in(元素1,元素2);

    例:select * from t_student where age in (21,23);

           select * from t_student where age not in (21,23);

     

    5.带between and的范围查询:select 字段1,字段2 from 表名 where 字段 [not]between 取值1 and 取值2;

    例:select * frome t_student where age between 21 and 29;

           select * frome t_student where age not between 21 and 29;

     

    6.带like的模糊查询:select 字段1,字段2… frome 表名 where 字段 [not] like ‘字符串’;

        “%”代表任意字符;

        “_”代表单个字符;

    例:select * frome t_student where stuName like ‘张三”;

           select * frome t_student where stuName like ‘张三%”;

           select * frome t_student where stuName like ‘%张三%”;//含有张三的任意字符

           select * frome t_student where stuName like ‘张三_”

     

    7.空值查询:select 字段1,字段2…from 表名 where 字段  is[not] null;

     

    8.带and多条件查询:

    select 字段1,字段2…from 表名 where 条件表达式1 and 条件表达式2 [and 条件表达式n]

    例:select * from t_student where gradeName=’一年级’ and age=23;

     

    9.带or的多条件查询

    select 字段1,字段2…frome 表名 where 条件表达式1 or 条件表达式2 [or 条件表达式n]

    例:select * frome t_student where gradeName=’一年级’ or age=23;//或者,条件只要满足一个

     

    10.distinct去重复查询:select distinct 字段名 from 表名;

     

    11.对查询结果排序order byselect 字段1,字段2…from 表名 order by 属性名 [asc|desc]

    例:select * frome t_student order by age desc;//降序,从大到小

           select * frome t_student order by age asc;//升序,asc默认可以不写

     

    12.分组查询group by

    group by 属性名 [having 条件表达式][with rollup]

    1.单独使用(毫无意义,不能单独使用);

     

    2.与group_concat()函数一起使用;

    例:select gradeName,group_concat(stuName) from t_student group by gradeName;

     

    3.与聚合函数一起使用;

    例:select gradeName,count(stuName) from t_student group by gradeName;

     

    4.与having一起使用(显示输出的结果);

    例:select gradeName,count(stuName) from t_student group by gradeName having count(stuName)>3;

    5.与with rollup 一起使用(最后加入一个总和行);

    例:select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;

      

    13.limit 分页查询:select 字段1,字段2,…from 表名 limit 初始位置,记录数;

    例子:select * from t_student limit 0,5;

     

     

    (二)多表连接查询

     

    表一:t_book

     

    表二:t_bookType

     

    表三:t_priceLevel

     

     

    select * from t_book,t_bookType;

     

    1.内连接查询(两张或以上的表连接起来查询需要的数据)

    根据表一的bookTypeId查询出所有bookTypeName

    select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;

     

    查询某几个字段:

    select bookNme,author from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;

     

     

    2.外连接查询(两张或以上的表连接起来查询某张表的信息)

     

    3.左连接查询

    select * from t_book left join t_bookType on t_book.bookTypeId=t_bookType.id;

    如下图:表一(左边表)t_book的数据全部查出 表二没有的字段用null代替

     

    4.右连接查询

    select * from t_book right join t_bookType on t_book.bookTypeId=t_bookType.id;

    查出表二(右边表)的所有信息,表一没有的用null代替

     

    5.多条件连接查询

    select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70;

     

     

     

    子查询

    1.带in关键字的子查询(一个查询语句的条件可能落在另一个select语句的查询结果中)

    select * from t_book where bookType in(select id from t_bookType);

    select * from t_book where bookType not in(select id from t_bookType);

     

    2.带比较运算符的子查询(子查询可以使用比较运算符)

    select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);

     

    3.带exists关键字的子查询(加入子查询查询到记录,则进行外层查询,否则,不执行外层查询)

    select * from t_book where exists(select * from t_booktype);

    select * from t_book where not exists(select * from t_booktype);

     

    4.带any关键字的子查询(any关键字表示满足其中任一条件)

    select * from t_book where price>= any(select price from t_priceLevel);

     

    5.带all关键字的子查询(all关键字表示满足所有条件)

    select * from t_book where price>= all(select price from t_priceLevel);

     

     

    合并查询

    1.union

    使用union关键字是,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录;

    select id from t_book union select id from t_bookType;

    2.union all

    使用union all,不会去除掉重复的记录;

    select id from t_book union all select id from t_bookType;

    展开全文
  • mysql查询语句汇总

    千次阅读 2020-11-01 18:42:43
    select * from table where …; insert into table ( 列…) values ( 值…); update table set 列名=新值 where …; delete from table where …;...2.查询入职员工时间排名倒数第三的员工所有信息 sele

    select * from table where …;
    insert into table ( 列…) values ( 值…);
    update table set 列名=新值 where …;
    delete from table where …;
    一些常见例子:

    1.查找入职最晚员工
    select * from employees where hire_date IN (select max(hire_date) from employees);

    2.查询入职员工时间排名倒数第三的员工所有信息
    select * from employees order by hire_date desc limit 2,1;

    3.查找各个部门当前领导当前薪水详情以及其对应部门编号(连表查询)
    select salaries.*,dept_manager.dept_no
    from salaries left join dept_manager
    on salaries.emp_no = dept_manager.emp_no
    where salaries.to_date=‘9999-01-01’
    and dept_manager.to_date=‘9999-01-01’
    order by salaries.emp_no asc;

    4.查找所有已经分配部门的员工的last_name和first_name以及dept_no(连表查询)
    select employees.last_name,employees.first_name,dept_emp.dept_no
    from employees,dept_emp
    on employees.emp_no=dept_emp.emp_no;

    5.查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员工

    展开全文
  • MySQL SQL查询语句大全集锦(经典珍藏),可以每天练习的
  • 多表查询:  分类:合并结果集,连接查询,子查询   一:合并结果集 如果两张表的列类型和列数相同,可以进行合并, 关键字:union(去除重复行);union all(不去除重复行)   例: select * from cd ...

    多表查询:

           分类:合并结果集,连接查询,子查询

     

    一:合并结果集

    如果两张表的列类型和列数相同,可以进行合并,

    关键字:union(去除重复行);union all(不去除重复行)

         

    例:
    select * from cd union all select * from ad;

          

     

     

     

     

     

     

     

     

    二:连接查询

           分类:内连接,外链接(左外连接,右外连接,全外链接(MySql不支持)),自然连接

     

    1,内连接

           1.1,直接查询两张表会得到笛卡尔积表

                 

                 

    1.2,方言写法:查询表stu 和表teacher,得到每个学生的姓名,对应的课程,课程老师等信息;

          

    Select s.name , s.age, t.name, t.class from stu s, teacher t where s.classID=t.id;

                 

                 

           1.3,标准的写法:

          

    Select s.name , s.age, t.name inner t.class from stu s inner join teacher t on s.classID=t.id;

                 

                 

     

     

     

     

     

     

     

     

     

     

     

     

    2,外连接:

    2.1,左外连接:(左外即左表为主表,左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来,左表不满足条件的记录,右表部分都为NULL)

                 

    Select * from stu s left outer join teacher t on s.classID=t.id;

                 

                 

    2.2,右外连接:右表就无论满足条件都会查询出来,而左表只有满足条件才能查询出来,右表不满足条件的记录,其左表部分都为NULL

                 

     Select * from stu s right outer join teacher t on s.classID=t.id;

                 

                 

    2.3,全连接:在其他数据库中使用full outer join实现全连接,但是MySql不支持,我们可以使用union来完成全连接。在左外查询语句和右外查询语句之间加上union,得到左外连接和右外连接的结果集,可以间接实现全连接。

                 

                 

                 

     

     

     

     

     

     

     

    三:子查询

           子查询即查询中包含查询

     

    1,出现的位置:

           1.1,where后作为条件存在

           例:查询stu表中年龄最大的人的详细信息

          

    Select * from stu where age = (select max(age) from stu);

          

          

           1.2,from后作为表存在(多行多列)

           例:查询上课程1的学生的姓名,性别,年龄信息:

          

    Select s.name,s.sex,s.age from (select * from stu where classID=1) s;

          

          

     

    2,条件:    

    2.1,单行单列:是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。 可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧 (Mysql中“<>”表示不等号的意思,有的地方写成!=或#)

                  例:查询stu表中年龄大于平均年龄的人的信息

                

      Select * from stu where age>(select avg(age) from stu);

                 

                 

    2.2,多行单列:指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。 
        可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧 
        可以使用 IN、ANY、SOME 和 ALL 操作符,不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。 

                  例子:查询年龄大于,课程标号为1的人的,所有人的详细信息

                 

     Select * from stu age> all (select age from stu where classID=1);

                 

                 

    2.3,单行多列:指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。 

                  例子:查询stu表中,跟“张三”选修同一课程且年龄相同的人的信息

                

      Select * from stu where (classID,age) in (select classID,age from stu where where name=‘张三’ ) ;

                 

                 

           2.4,多行多列:指子查询返回的结果集是 N 行 N 列的一个表数据。 

    例句:

    SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog);

                 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    四:子查询中关键字举例

     

    1,any关键字:any关键词的意思是“对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE”。

           例:如果“10>any(10,21,11,3,21,11)”,由于10>3,所以该判断会返回true。

     

    2,in关键字:使用in进行子查询,这个我们在日常写sql的时候是经常遇到的。in的意思就是指定的一个值是否在这个集合中,如何在就返回TRUE;否则就返回FALSE了。

           例子:查询stu表中男性,且选过课的人的信息

    select * from stu where sex='男' and exists
    (select *
    from teacher
    where stu.classID=teacher.id);

       

       

    3,all关键字:all必须与比较操作符一起使用。all的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”

    例:如果“10 >all(2, 4, 5, 1)”,由于10大于集合中的所有值,所以这条判断就返回TRUE;而如果为“10 >all(20, 3, 2, 1, 4)”,这样的话,由于10小于20,所以该判断就会返回FALSE

     

     

    4,独立子查询:独立字查询是不依靠外部查询的结果就能单独运行的查询语句;什么叫依赖外部查询,我们看下面的例子

           例子:查询stu表中,男性,且选过课的人的信息       方式1:

    select * from stu
    where sex=’男’ and classID in
    (select id from teacher);

                  方式2:

    select * from stu
    where sex=’男’ and exits
    (select * from teacher
    where stu.classID=teacher.id);

          

          

    对于sql语句1,我们将子查询单独复制出来,也是可以单独执行的,就是子查询与外部查询没有任何关系。

    对于sql语句2,我们将子查询单独复制出来,就无法单独执行了,由于sql语句2的子查询依赖外部查询的某些字段,这就导致子查询就依赖外部查询,就产生了相关性。

     

    5,exists谓词:EXISTS是一个非常牛叉的谓词,它允许数据库高效地检查指定查询是否产生某些行。根据子查询是否返回行,该谓词返回TRUE或FALSE。与其 它谓词和逻辑表达式不同的是,无论输入子查询是否返回行,EXISTS都不会返回UNKNOWN,对于EXISTS来说,UNKNOWN就是FALSE。 还是上面的语句,获得城市为hangzhou,并且存在订单的用户。

     

     

     

    四:子查询的优化问题

    很多查询中需要使用子查询。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死。子查询可以使查询语 句很灵活,但子查询的执行效率不高。

      子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕 后,MySQL需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

      在MySQL中可以使用连接查 询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快

     

     

    不能优化的子查询: 
      1、mysql不支持子查询合并和聚合函数子查询优化,mariadb对聚合函数子查询进行物化优化; 
      2、mysql不支持from子句子查询优化,mariadb对from子句子查询进行子查询上拉优化; 
      3、mysql和mariadb对子查询展开提供有限的支持,如对主键的操作才能进行上拉子查询优化; 
      4、mysql不支持exists子查询优化,mariadb对exists关联子查询进行半连接优化,对exists非关联子查询没有进一步进行优化; 
      5、mysql和mariadb不支持not exists子查询优化; 
      6、mysql和mariadb对in子查询,对满足半连接语义的查询进行半连接优化,再基于代价评估进行优化,两者对半连接的代价评估选择方式有差异; 
      7、mysql不支持not in子查询优化,mariadb对非关联not in子查询使用物化优化,对关联not in子查询不做优化; 
      8、mysql和mariadb对>all非关联子查询使用max函数,<all非关联子查询使用min函数,对=all和非关联子查询使用exists优化; 
      9、对>some和>any非关联子查询使用min函数,对<some和<any非关联子查询使用max函数,=any 和=some子查询使用半连接进行优化,对>some和>any关联子查询以及<some和<any关联子查询只有exists 优化。

     

    展开全文
  • MySQL查询语句大全集锦

    千次阅读 2018-06-05 13:53:51
    1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql&gt; SHOW DATABASES;2:2、创建一个数据库MYSQLDATAmysql&gt; CREATE DATABASE MYSQLDATA;3:选择你所创建的数据库mysql&gt; USE MYSQLDATA; (按...

    1:使用SHOW语句找出在服务器上当前存在什么数据库:

    mysql> SHOW DATABASES;

    2:2、创建一个数据库MYSQLDATA

    mysql> CREATE DATABASE MYSQLDATA;

    3:选择你所创建的数据库

    mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)

    4:查看现在的数据库中存在什么表

    mysql> SHOW TABLES;

    5:创建一个数据库表

    mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

    6:显示表的结构:

    mysql> DESCRIBE MYTABLE;

    7:往表中加入记录

    mysql> insert into MYTABLE values (”hyq”,”M”);

    8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)

    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;

    9:导入.sql文件命令(例如D:/mysql.sql)

    mysql>use database;

    mysql>source d:/mysql.sql;

    10:删除表

    mysql>drop TABLE MYTABLE;

    11:清空表

    mysql>delete from MYTABLE;

    12:更新表中数据

    mysql>update MYTABLE set sex=”f” where name='hyq';

    以下是无意中在网络看到的使用MySql的管理心得,

    在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqld start”命令,注意启动者应具有管理员权限。

    刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:

    use mysql;

    delete from User where User=”";

    update User set Password=PASSWORD('newpassword') where User='root';

    如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令:

    mysql -uroot -p;

    mysql -uroot -pnewpassword;

    mysql mydb -uroot -p;

    mysql mydb -uroot -pnewpassword;

    上面命令参数是常用参数的一部分,详细情况可参考文档。此处的mydb是要登录的数据库的名称。

    在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下:

    grant all on mydb.* to NewUserName@HostName identified by “password” ;

    grant usage on *.* to NewUserName@HostName identified by “password”;

    grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;

    grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;

    若 要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段,也可以使用REVOKE操作。

    下面给出本人从其它资料(www.cn-java.com)获得的对常用权限的解释:

    全局管理权限:

    FILE: 在MySQL服务器上读写文件。

    PROCESS: 显示或杀死属于其它用户的服务线程。

    RELOAD: 重载访问控制表,刷新日志等。

    SHUTDOWN: 关闭MySQL服务。

    数据库/数据表/数据列权限:

    ALTER: 修改已存在的数据表(例如增加/删除列)和索引。

    CREATE: 建立新的数据库或数据表。

    DELETE: 删除表的记录。

    DROP: 删除数据表或数据库。

    INDEX: 建立或删除索引。

    INSERT: 增加表的记录。

    SELECT: 显示/搜索表的记录。

    UPDATE: 修改表中已存在的记录。

    特别的权限:

    ALL: 允许做任何事(和root一样)。

    USAGE: 只允许登录–其它什么也不允许做。


    一、 简单查询
    简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的
    表或视图、以及搜索条件等。


    例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。


    复制内容到剪贴板
    代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三'

    (一) 选择列表
    选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。


    1、选择所有列
    例如,下面语句显示testtable表中所有列的数据:
    复制内容到剪贴板
    代码:SELECT * FROM testtable

    2、选择部分列并指定它们的显示次序
    查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
    例如:
    复制内容到剪贴板
    代码:SELECT nickname,email FROM testtable

    3、更改列标题
    在选择列表中,可重新指定列标题。定义格式为:
    列标题=列名
    列名 列标题
    如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列
    标题:
    复制内容到剪贴板
    代码:SELECT 昵称=nickname,电子邮件=email FROM testtable

    4、删除重复行
    SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认
    为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。


    5、限制返回的行数
    使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是
    表示一百分数,指定返回的行数等于总行数的百分之几。
    例如:
    复制内容到剪贴板
    代码:SELECT TOP 2 * FROM `testtable`
    复制内容到剪贴板
    代码:SELECT TOP 20 PERCENT * FROM `testtable`


    (二) FROM子句
    FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,
    它们之间用逗号分隔。
    在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列
    所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应
    使用下面语句格式加以限定:
    复制内容到剪贴板
    代码:SELECT `username`,citytable.cityid
    FROM `usertable`,`citytable`
    WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下两种格式为表或视图指定别名:
    复制内容到剪贴板
    代码:表名 as 别名
    表名 别名例如上面语句可用表的别名格式表示为:
    复制内容到剪贴板
    代码:SELECT `username`,b.cityid
    FROM usertable a,citytable b
    WHERE a.cityid=b.cityidSELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。
    例如:
    复制内容到剪贴板
    代码:SELECT a.au_fname+a.au_lname
    FROM authors a,titleauthor ta
    (SELECT `title_id`,`title`
    FROM `titles`
    WHERE ` ytd_sales`>10000
    ) AS t
    WHERE a.au_id=ta.au_id
    AND ta.title_id=t.title_id此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。


    (三) 使用WHERE子句设置查询条件
    WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:
    复制内容到剪贴板
    代码:SELECT * FROM usertable WHERE age>20 WHERE子句可包括各种条件运算符:
    比较运算符(大小比较):>、>=、=、、!>、!=10 AND age复制内容到剪贴板
    代码:SELECT * FROM `usertable` ORDER BY `age` DESC,`userid` ASC另外,可以根据表达式进行排序。


    二、 联合查询
    UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联
    合查询。

    UNION的语法格式为:
    复制内容到剪贴板
    代码:select_statement
    UNION [ALL] selectstatement
    [UNION [ALL] selectstatement][…n]其中selectstatement为待联合的SELECT查询语句。
    ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
    联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语
    句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
    在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选
    择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类
    型,系统将低精度的数据类型转换为高精度的数据类型。
    在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
    查询1 UNION (查询2 UNION 查询3)


    三、连接查询
    通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
    在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在
    一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带
    来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行
    查询。
    连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于
    将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

    SQL-92标准所定义的FROM子句的连接语法格式为:

    代码:FROM join_table join_type join_table [ON (join_condition)]其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。
    join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。

    内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

    外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
    和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。


    交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

    连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

    无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

    代码:SELECT p1.pub_id,p2.pub_id,p1.pr_info
    FROM pub_info AS p1 INNER JOIN pub_info AS p2
    ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)内连接
    内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

    内连接分三种:
    1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
    2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、、!。
    3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

    例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
    代码:SELECT *
    FROM authors AS a INNER JOIN publishers AS p
    ON a.city=p.city又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
    复制内容到剪贴板
    代码:SELECT a.*,p.pub_id,p.pub_name,p.country
    FROM authors AS a INNER JOIN publishers AS p
    ON a.city=p.city

    (二)外连接内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件
    的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

    如下面使用左外连接将论坛内容和作者信息连接起来:

    代码:SELECT a.*,b.* FROM `luntan` LEFT JOIN usertable as b
    ON a.username=b.username下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

    代码:SELECT a.*,b.*
    FROM city as a FULL OUTER JOIN user as b
    ON a.username=b.username

    (三)交叉连接
    交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
    据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
    例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
    于6*8=48行。

    代码:SELECT `type`,`pub_name`
    FROM `titles` CROSS JOIN `publishers`
    ORDER BY `type`

    SQL核心语句(非常实用的几个技巧)
    _ArticleContent1_lblContent>插入数据
    向表中添加一个新记录,你要使用SQL INSERT 语句。这里有一个如何使用这种语句的例子:
    代码:INSERT mytable (mycolumn) VALUES (‘some data') 这个语句把字符串'some data'插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数据在第二个括号中给出。
    INSERT 语句的完整句法如下:

    代码:INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |
    Values_list | select_statement} 如果一个表有多个字段,通过把字段名和字段值用逗号隔开,你可以向所有的字段中插入数据。假设表mytable有三个字段first_column,second_column,和third_column。

    下面的INSERT语句添加了一条三个字段都有值的完整记录:

    代码:INSERT mytable (first_column,second_column,third_column)
    VALUES (‘some data','some more data','yet more data') 注意
    你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
    如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
    如果该字段有一个缺省值,该值会被使用。例如,假设你插入新记录时没有给字段third_column提供数据,而这个字段有一个缺省值'some value'。在这种情况下,当新记录建立时会插入值'some value'。
    如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
    如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
    The column in table mytable may not be null.
    最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
    注意
    向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
    的标识字段的值。考虑如下的SQL语句:
    复制内容到剪贴板
    代码:INSERT mytable (first_column) VALUES(‘some value') [code]
    [code]INSERT anothertable(another_first,another_second)
    VALUES(@@identity,'some value') 如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。
    字段another_first应该与字段first_column有相同的数据类型。但是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。
    删除记录
    要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。例如,下面的这个DELETE语句只删除字段first_column的值等于'Delete Me'的记录:

    代码:DELETE mytable WHERE first_column='Deltet Me' DELETE 语句的完整句法如下:
    复制内容到剪贴板
    代码:DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 语句中可以使用的任何条件都可以在DELECT 语句的WHERE子句中使用。例如,下面的这个DELETE语句只删除那些first_column字段的值为'goodbye'或second_column字段的值为'so long'的记录:

    代码:DELETE mytable WHERE first_column='goodby' OR second_column='so long' 如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。你不应该有这种想法。如果你想删除应该表中的所有记录,应使用第十章所讲的TRUNCATE TABLE语句。


    注意
    为什么要用TRUNCATE TABLE 语句代替DELETE语句?当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多。
    更新记录
    要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。请看这个例子:

    代码:UPDATE mytable SET first_column='Updated!' WHERE second_column='Update Me!' 这个UPDATE 语句更新所有second_column字段的值为'Update Me!'的记录。对所有被选中的记录,字段first_column的值被置为'Updated!'。
    下面是UPDATE语句的完整句法:

    代码:UPDATE {table_name|view_name} SET [{table_name|view_name}]
    {column_list|variable_list|variable_and_column_list}
    [,{column_list2|variable_list2|variable_and_column_list2}…
    [,{column_listN|variable_listN|variable_and_column_listN}]]
    [WHERE clause] 注意
    你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使用UPDATETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
    如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,如果你想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:
    你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新first_column,second_column,和third_column这三个字段:

    代码:UPDATE mytable SET first_column='Updated!'
    Second_column='Updated!'
    Third_column='Updated!'
    WHERE first_column='Update Me1' 技巧
    SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。
    用SELECT 创建记录和表
    你也许已经注意到,INSERT 语句与DELETE语句和UPDATE语句有一点不同,它一次只操作一个记录。然而,有一个方法可以使INSERT 语句一次添加多个记录。要作到这一点,你需要把INSERT 语句与SELECT 语句结合起来,象这样:

    代码:INSERT mytable (first_column,second_column)
    SELECT another_first,another_second
    FROM anothertable
    WHERE another_first='Copy Me!' 这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_first的值为'Copy Me!'的记录才被拷贝。
    当为一个表中的记录建立备份时,这种形式的INSERT 语句是非常有用的。在删除一个表中的记录之前,你可以先用这种方法把它们拷贝到另一个表中。
    如果你需要拷贝整个表,你可以使用SELECT INTO 语句。例如,下面的语句创建了一个名为newtable的新表,该表包含表mytable的所有数据:

    代码:SELECT * INTO newtable FROM mytable 你也可以指定只有特定的字段被用来创建这个新表。要做到这一点,只需在字段列表中指定你想要拷贝的字段。另外,你可以使用WHERE 子句来限制拷贝到新表中的记录。下面的例子只拷贝字段second_columnd的值等于'Copy Me!'的记录的first_column字段。

    代码:SELECT first_column INTO newtable
    FROM mytable
    WHERE second_column='Copy Me!' 使用SQL修改已经建立的表是很困难的。例如,如果你向一个表中添加了一个字段,没有容易的办法来去除它。另外,如果你不小心把一个字段的数据类型给错了,你将没有办法改变它。但是,使用本节中讲述的SQL语句,你可以绕过这两个问题。
    例如,假设你想从一个表中删除一个字段。使用SELECT INTO 语句,你可以创建该表的一个拷贝,但不包含要删除的字段。这使你既删除了该字段,又保留了不想删除的数据。
    如果你想改变一个字段的数据类型,你可以创建一个包含正确数据类型字段的新表。创建好该表后,你就可以结合使用UPDATE语句和SELECT 语句,把原来表中的所有数据拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据。
    _ArticleContent1_lblContent>插入数据
    向表中添加一个新记录,你要使用SQL INSERT 语句。这里有一个如何使用这种语句的例子:
    复制内容到剪贴板
    代码:INSERT mytable (mycolumn) VALUES (‘some data') 这个语句把字符串'some data'插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数据在第二个括号中给出。
    INSERT 语句的完整句法如下:
    复制内容到剪贴板
    代码:INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES | Values_list | select_statement} 如果一个表有多个字段,通过把字段名和字段值用逗号隔开,你可以向所有的字段中插入数据。假设表mytable有三个字段first_column,second_column,和third_column。下面的INSERT语句添加了一条三个字段都有值的完整记录:
    复制内容到剪贴板
    代码:INSERT mytable (first_column,second_column,third_column) VALUES (‘some data','some more data','yet more data')
    [code]
    注意
    你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
    如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
    如果该字段有一个缺省值,该值会被使用。例如,假设你插入新记录时没有给字段third_column提供数据,而这个字段有一个缺省值'some value'。在这种情况下,当新记录建立时会插入值'some value'。
    如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
    如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
    The column in table mytable may not be null.
    最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
    注意
    向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
    的标识字段的值。考虑如下的SQL语句:
    [code]INSERT mytable (first_column) VALUES(‘some value')
    复制内容到剪贴板
    代码:INSERT anothertable(another_first,another_second) VALUES(@@identity,'some value') 如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。
    字段another_first应该与字段first_column有相同的数据类型。但是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。
    删除记录
    要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。例如,下面的这个DELETE语句只删除字段first_column的值等于'Delete Me'的记录:
    复制内容到剪贴板
    代码:DELETE mytable WHERE first_column='Deltet Me' DELETE 语句的完整句法如下:
    复制内容到剪贴板
    代码:DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 语句中可以使用的任何条件都可以在DELECT 语句的WHERE子句中使用。例如,下面的这个DELETE语句只删除那些first_column字段的值为'goodbye'或second_column字段的值为'so long'的记录:
    复制内容到剪贴板
    代码:DELETE mytable WHERE first_column='goodby' OR second_column='so long' 如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。你不应该有这种想法。如果你想删除应该表中的所有记录,应使用第十章所讲的TRUNCATE TABLE语句。
    注意
    为什么要用TRUNCATE TABLE 语句代替DELETE语句?当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多。
    更新记录
    要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。请看这个例子:
    复制内容到剪贴板
    代码:UPDATE mytable SET first_column='Updated!' WHERE second_column='Update Me!' 这个UPDATE 语句更新所有second_column字段的值为'Update Me!'的记录。对所有被选中的记录,字段first_column的值被置为'Updated!'。
    下面是UPDATE语句的完整句法:
    复制内容到剪贴板
    代码:UPDATE {table_name|view_name} SET [{table_name|view_name}]
    {column_list|variable_list|variable_and_column_list}
    [,{column_list2|variable_list2|variable_and_column_list2}…
    [,{column_listN|variable_listN|variable_and_column_listN}]]
    [WHERE clause] 注意
    你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使用UPDATETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
    如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,如果你想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:
    你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新first_column,second_column,和third_column这三个字段:
    复制内容到剪贴板
    代码:UPDATE mytable SET first_column='Updated!'
    Second_column='Updated!'
    Third_column='Updated!'
    WHERE first_column='Update Me1' 技巧
    SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。
    用SELECT 创建记录和表
    你也许已经注意到,INSERT 语句与DELETE语句和UPDATE语句有一点不同,它一次只操作一个记录。然而,有一个方法可以使INSERT 语句一次添加多个记录。要作到这一点,你需要把INSERT 语句与SELECT 语句结合起来,象这样:
    复制内容到剪贴板
    代码:INSERT mytable (first_column,second_column)
    SELECT another_first,another_second
    FROM anothertable
    WHERE another_first='Copy Me!' 这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_first的值为'Copy Me!'的记录才被拷贝。
    当为一个表中的记录建立备份时,这种形式的INSERT 语句是非常有用的。在删除一个表中的记录之前,你可以先用这种方法把它们拷贝到另一个表中。
    如果你需要拷贝整个表,你可以使用SELECT INTO 语句。例如,下面的语句创建了一个名为newtable的新表,该表包含表mytable的所有数据:
    复制内容到剪贴板
    代码:SELECT * INTO newtable FROM mytable 你也可以指定只有特定的字段被用来创建这个新表。要做到这一点,只需在字段列表中指定你想要拷贝的字段。另外,你可以使用WHERE 子句来限制拷贝到新表中的记录。下面的例子只拷贝字段second_columnd的值等于'Copy Me!'的记录的first_column字段。
    复制内容到剪贴板
    代码:SELECT first_column INTO newtable
    FROM mytable
    WHERE second_column='Copy Me!' 使用SQL修改已经建立的表是很困难的。例如,如果你向一个表中添加了一个字段,没有容易的办法来去除它。另外,如果你不小心把一个字段的数据类型给错了,你将没有办法改变它。但是,使用本节中讲述的SQL语句,你可以绕过这两个问题。
    例如,假设你想从一个表中删除一个字段。使用SELECT INTO 语句,你可以创建该表的一个拷贝,但不包含要删除的字段。这使你既删除了该字段,又保留了不想删除的数据。
    如果你想改变一个字段的数据类型,你可以创建一个包含正确数据类型字段的新表。创建好该表后,你就可以结合使用UPDATE语句和SELECT 语句,把原来表中的所有数据拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据。

    SQL语法,SQL语句大全,SQL基础

    SQL 语法参考手册(SQL)/数据类型
    2006-07-24 07:42
    《SQL 语法参考手册(SQL)》
    DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的*作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统 R“的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。
    一、资料定义 DDL(Data Definition Language)
    资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
    1、建表格:
    Create TABLE table_name(
    column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
    column2 DATATYPE [NOT NULL],
    ...)
    说明: 
    DATATYPE --是资料的格式,详见表。
    NUT NULL --可不可以允许资料有空的(尚未有资料填入)。
    PRIMARY KEY --是本表的主键。
    2、更改表格 
    Alter TABLE table_name
    ADD COLUMN column_name DATATYPE
    说明:增加一个栏位(没有删除某个栏位的语法。
    Alter TABLE table_name
    ADD PRIMARY KEY (column_name)
    说明:更改表得的定义把某个栏位设为主键。
    Alter TABLE table_name
    Drop PRIMARY KEY (column_name)
    说明:把主键的定义删除。
    3、建立索引 
    Create INDEX index_name ON table_name (column_name)
    说明:对某个表格的栏位建立索引以增加查询时的速度。
    4、删除 
    Drop table_name
    Drop index_name
    二、的资料形态 DATATYPEs
    smallint
    16 位元的整数。
    interger
    32 位元的整数。
    decimal(p,s)
    p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数
    点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
    float
    32位元的实数。
    double
    64位元的实数。
    char(n)
    n 长度的字串,n不能超过 254。
    varchar(n)
    长度不固定且其最大长度为 n 的字串,n不能超过 4000。
    graphic(n)
    和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为
    了支援两个字元长度的字体,例如中文字。
    vargraphic(n)
    可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
    date
    包含了 年份、月份、日期。
    time
    包含了 小时、分钟、秒。
    timestamp
    包含了 年、月、日、时、分、秒、千分之一秒。
    三、资料*作 DML (Data Manipulation Language)
    资料定义好之後接下来的就是资料的*作。资料的*作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分别介绍他们的语法:
    1、增加资料:
    Insert INTO table_name (column1,column2,...)
    valueS ( value1,value2, ...)
    说明:
    1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
    2.栏位的资料形态和所填入的资料必须吻合。
    3.table_name 也可以是景观 view_name。
    Insert INTO table_name (column1,column2,...)
    Select columnx,columny,... FROM another_table
    说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
    2、查询资料:
    基本查询
    Select column1,columns2,...
    FROM table_name
    说明:把table_name 的特定栏位资料全部列出来
    Select *
    FROM table_name
    Where column1 = xxx
    [AND column2 〉 yyy] [OR column3 〈〉 zzz]
    说明:
    1.'*'表示全部的栏位都列出来。
    2.Where 之後是接条件式,把符合条件的资料列出来。
    Select column1,column2
    FROM table_name
    orDER BY column2 [DESC]
    说明:ORDER BY 是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大
    排列
    组合查询
    组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的
    表格才能够得到结果的。
    Select *
    FROM table1,table2
    Where table1.colum1=table2.column1
    说明:
    1.查询两个表格中其中 column1 值相同的资料。
    2.当然两个表格相互比较的栏位,其资料形态必须相同。
    3.一个复杂的查询其动用到的表格可能会很多个。
    整合性的查询:
    Select COUNT (*)
    FROM table_name
    Where column_name = xxx
    说明:
    查询符合条件的资料共有几笔。
    Select SUM(column1)
    FROM table_name
    说明:
    1.计算出总和,所选的栏位必须是可数的数字形态。
    2.除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。
    Select column1,AVG(column2)
    FROM table_name
    GROUP BY column1
    HAVING AVG(column2) 〉 xxx
    说明:
    1.GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字
    一起使用。
    2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。
    复合性的查询
    Select *
    FROM table_name1
    Where EXISTS (
    Select *
    FROM table_name2
    Where conditions )
    说明:
    1.Where 的 conditions 可以是另外一个的 query。
    2.EXISTS 在此是指存在与否。
    Select *
    FROM table_name1
    Where column1 IN (
    Select column1

    展开全文
  • 查询语句不会改变表的记录 查询语句一:基本查询1.字段控制2.条件控制 一:基本查询 1.字段控制 查询所有列select * from 表名; 查询指定列select 列名1,列名2,from 表名; 去除重复行select distinct 列名 from...
  • MySQL查询语句优化

    2019-06-11 13:56:11
    想要对一条查询语句进行优化,首先要对其进行分析,MySQL提供了这个机制, 可以通过explain sql 或者desc sql的语法去获取MySQL对某一条语句的执行计划(MySQL优化之后的),explain的用法这里就不再赘述了,在另外一篇文章...
  • MySQL DML语句整理汇总

    2020-09-09 03:55:28
    主要介绍了MySQL DML语句整理汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • mysql数据库基本查询语句汇总 使用数据库: USE DATABASE db_name; DESTINCT //去除相同的记录; 显示表: SHOW DATABASES; SHOW TABLES; SHOW TABLES FROM db_name; SHOW COLUMNS FROM tb_name...
  • MySQL通过慢查询日志定位执行效率较低的SQL语句,当慢查询日志的内容过多时,通过mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。  MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,...
  • Mysql数据库-使用的查询语句大全

    万次阅读 多人点赞 2018-12-03 18:28:12
    常规查询 查询所有字段:select * from 表名; 查询指定字段:select 列1,列2,... from 表名; 使用 as 给字段起别名: select 字段 as 名字.... from 表名; 查询某个表的某个字段:select 表名.字段 .... from 表名...
  • MySQL条件查询语句(一)

    万次阅读 2018-03-18 22:21:30
    条件查询 注意:条件查诟需要用到 where 询句,where 必须放到 from 询句表的后面; 执行顺序:先from再where过滤后再检索出来。 1、、支持如下运算 2、等号(=)操作符 (1)、查询薪水为5000的员工 例如:...
  • MySQL查询语句大全

    2016-12-28 20:15:49
    1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按...
  • 1. 查询不重复的记录 select distinct 字段 from 表名; eg: select distinct name from students;//查询名字不相同的学生;  select distinct name,age from students;//查询名字和年龄同时不同的学生    1...
  • 无论什么语言,不管什么框架,在这个大数据的时代,最终都会和数据库打...今天我们一起讨论一下mysql查询语句的执行顺序,这对项目开发中编写sql语句非常重要,知道sql语句里各个关键字的作用,从此写sql不是问题!!!
  • MySQL语句汇总

    2020-12-14 19:47:45
    MySQL语句汇总 文章目录MySQL语句汇总第一章:数据库基础知识:一、对数据库的操作二、数据表的基本操作:三、表的约束四、设置表的字段值自动增加第二章:索引1、创建表的时候创建索引1> 创建普通索引2> 创建唯一性...
  • 查询数值型数据:  SELECT * FROM tb_name WHERE sum > 100;  查询谓词:>,=,,!=,!>,!,=   二查询字符串  SELECT * FROM tb_stu WHERE sname = '小刘'  SELECT * FROM tb_stu WHERE ...
  • 数据库mysql的各种查询语句check的完整性约束 mysql多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建表+ 多表链接 分类汇总 外连接和子查询 完整性约束等等
  • mysql与oracle还是有些不一样的,有必要对于mysql的一些查询(或常用查询、容易踩的坑做个备注),持续更新,分为两块: 1、官方网站 2、收藏文章链接 :主要是汇总的一些文章 3、查询留存:按查询功能分大类,包括...
  • 1.查询记录 select*from 表名 [where 条件]; eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来 select field1,field2,...fieldn... from 表名 [where 条件]; eg:select id,name,...
  •   新手最常见的写法是,先通过select语句查询记录是否存在,存在则使用update语句更新,不存在则使用insert语句插入。 但是这样做明显不够优雅,存在几个问题: •为了执行一次更新操作,却在程序中使用了两次sql...
  • 常用不常用的函数大汇总~
  • MySQL之数据库基本查询语句

    千次阅读 多人点赞 2019-11-18 13:42:03
    ——————·今天距2020年43天·——————这是ITester软件测试小栈第80次推文SELECT基本查询语句查询单个列#查询Author表name列的值 select name ...
  • mysql命令查询语句

    2019-07-05 22:14:00
    1、单表查询 select * from student; 采用*效率低,不推荐,多用列名 一、单表查询的语法: SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ...
  • 今天小编就为大家分享一篇关于MySQL语句整理及汇总介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • MYSQL查询语句大全集锦

    千次阅读 2015-11-16 18:01:57
    MYSQL查询语句大全集锦  1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 ...
  • Mysql常用sql语句汇总

    2020-12-16 10:07:03
    1、mysql 导出文件: SELECT `pe2e_user_to_company`.company_name, `pe2e_user_to_company`.company_code, `users`.name, `users`.uid, `users`.mail, `pe2e_email_notification_email`.`email_cc` FROM `users` ,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,457
精华内容 11,382
关键字:

mysql查询语句汇总

mysql 订阅