Mysql

Posted 龚旭1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql相关的知识,希望对你有一定的参考价值。

什么是数据库(DataBase,简称DB)

数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的

过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用

数据库是长期存放在计算机内、有组织、可共享的数据即可。

数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享

 什么是数据库管理系统(DataBase Management System 简称DBMS)

在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键

这就用到了一个系统软件---数据库管理系统 

mysql、Oracle、SQLite、Access、MS SQL Server

mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

mysql介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

mysql是什么???

mysql就是一个socekt服务端
客户端软件
    mysql自带
    python模块

其他类型的数据库?

sqllite,db2,oracle,access,sql server,MySQL
分两大类:
  关系型:上面这一堆,注意:sql语句通用
  非关系型:mongodb,redis,memcache

 下载安装

#二进制rpm包安装
yum -y install mysql-server mysql
源码安装
1.解压tar包
cd /software
tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21

2.添加用户与组
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6.21

3.安装数据库
su mysql
cd mysql-5.6.21/scripts
./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data

4.配置文件
cd /software/mysql-5.6.21/support-files
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql   #若mysql的安装目录是/usr/local/mysql,则可省略此步
修改文件中的两个变更值
basedir=/software/mysql-5.6.21
datadir=/software/mysql-5.6.21/data

5.配置环境变量
vim /etc/profile
export MYSQL_HOME="/software/mysql-5.6.21"
export PATH="$PATH:$MYSQL_HOME/bin"
source /etc/profile

6.添加自启动服务
chkconfig --add mysql
chkconfig mysql on

7.启动mysql
service mysql start

8.登录mysql及改密码与配置远程访问
mysqladmin -u root password \'your_password\'     #修改root用户密码
mysql -u root -p     #登录mysql,需要输入密码
mysql>GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'your_password\' WITH GRANT OPTION;     #允许root用户远程访问
mysql>FLUSH PRIVILEGES;     #刷新权限
linux版本安装

SQL语句规范

登录到MySQL

当 MySQL 服务已经运行时, 我们可以通过MySQL自带的客户端工具登录到MySQL数据库中, 首先打开命令提示符, 输入以下格式的命名:

mysql -h 主机名 -u 用户名 -p

  • -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
  • -u : 所要登录的用户名;
  • -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项

<1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

<2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。

<3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

SELECT * FROM tb_table
            WHERE NAME="YUAN";

<4> 注释:单行注释:--

               多行注释:/*......*/

<5>sql语句可以折行操作

数据类型

 

基本数据类型

MySQL的数据类型大致分为:数值、时间和字符串

     bit[(M)]
            二进制位(101001),m表示二进制位的长度(1-64),默认m=1

      tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                -128 ~ 127.
            无符号:
                0 ~ 255

            特别的: MySQL中无布尔值,使用tinyint(1)构造。

        int[(m)][unsigned][zerofill]

            整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -2147483648 ~ 2147483647
                无符号:
                    0 ~ 4294967295

            特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002

        bigint[(m)][unsigned][zerofill]
            大整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -9223372036854775808 ~ 9223372036854775807
                无符号:
                    0  ~  18446744073709551615

        decimal[(m[,d])] [unsigned] [zerofill]
            准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

            特别的:对于精确数值计算时需要用此类型
                   decaimal能够存储精确值的原因在于其内部按照字符串存储。

         FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
            单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                无符号:
                    -3.402823466E+38 to -1.175494351E-38,
                    0
                    1.175494351E-38 to 3.402823466E+38
                有符号:
                    0
                    1.175494351E-38 to 3.402823466E+38

            **** 数值越大,越不准确 ****

        DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
            双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

                无符号:
                    -1.7976931348623157E+308 to -2.2250738585072014E-308
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
                有符号:
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
            **** 数值越大,越不准确 ****


       char (m)
            char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
            PS: 即使数据小于m长度,也会占用m长度
        varchar(m)
            varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

            注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

        text
            text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。

        mediumtext
            A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.

        longtext
            A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.


        enum
            枚举类型,
            An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
            示例:
                CREATE TABLE shirts (
                    name VARCHAR(40),
                    size ENUM(\'x-small\', \'small\', \'medium\', \'large\', \'x-large\')
                );
                INSERT INTO shirts (name, size) VALUES (\'dress shirt\',\'large\'), (\'t-shirt\',\'medium\'),(\'polo shirt\',\'small\');

        set
            集合类型
            A SET column can have a maximum of 64 distinct members.
            示例:
                CREATE TABLE myset (col SET(\'a\', \'b\', \'c\', \'d\'));
                INSERT INTO myset (col) VALUES (\'a,d\'), (\'d,a\'), (\'a,d,a\'), (\'a,d,d\'), (\'d,a,d\');

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31TIME
            HH:MM:SS(\'-838:59:59\'/\'838:59:59\'YEAR
            YYYY(1901/2155DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

二进制数据:TinyBlob、Blob、MediumBlob、LongBlob

Mysql常用命令

1.导出整个数据库

mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构

mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库
1.常用source 命令

进入mysql数据库控制台,如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source wcnc_db.sql

2.使用mysqldump命令

mysqldump -u username -p dbname < filename.sql

3.使用mysql命令

mysql -u username -p -D dbname < filename.sql

一、启动与退出

1、进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
2、退出MySQL:quit或exit

二、库操作
1.创建数据库

命令:create database <数据库名>
例如:建立一个名为xhkdb的数据库
mysql> create database xhkdb; 

2.显示所有的数据库

命令:show databases (注意:最后有个s)
mysql> show databases;

3.删除数据库

命令:drop database <数据库名>
例如:删除名为 xhkdb的数据库
mysql> drop database xhkdb;

4.切换数据库

命令: use <数据库名>
mysql> use database_name;

5.查看当前使用的数据库

mysql> select database();

6.当前数据库包含的表信息:

mysql> show tables; (注意:最后有个s)

三、表操作,操作之前应连接某个数据库
1.建表

命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default \'0\',
> degree double(16,2));

2.获取表结构

命令: desc 表名,或者show columns from 表名
mysql>DESCRIBE MyClass
mysql> desc MyClass; 
mysql> show columns from MyClass;

3.删除表

命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;

4.插入数据

命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5.
mysql> insert into MyClass values(1,\'Tom\',96.45),(2,\'Joan\',82.99), (2,\'Wang\', 96.59);

5.查询表中的数据

1)、查询所有行
命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据
mysql> select * from MyClass;

2)、查询前几行数据
例如:查看表 MyClass 中前2行数据
mysql> select * from MyClass order by id limit 0,2;

或者:mysql> select * from MyClass limit 0,2;

6.删除表中数据

命令:delete from 表名 where 表达式
例如:删除表 MyClass中编号为1 的记录
mysql> delete from MyClass where id=1;

7.修改表中数据:update 表名 set 字段=新值,… where 条件

mysql> update MyClass set name=\'Mary\' where id=1;

8.在表中增加字段:

命令:alter table 表名 add字段 类型 其他; 
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0 
mysql> alter table MyClass add passtest int(4) default \'0\'

9.更改表名:

命令:rename table 原表名 to 新表名; 
例如:在表MyClass名字更改为YouClass 
mysql> rename table MyClass to YouClass;

10.更新字段内容

update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名,\'旧内容\',\'新内容\');

文章前面加入4个空格
update article set content=concat(\'  \',content);       

字段类型

 
INT[(M)] 型 正常大小整数类型
DOUBLE[(M,D)] [ZEROFILL] 型 正常大小(双精密)浮点数字类型 
DATE 日期类型 支持的范围是1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
CHAR(M) 型 定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
BLOB TEXT类型 最大长度为65535(2^16-1)个字符
VARCHAR型 变长字符串类型

 

1.导入数据库表 

(1)创建.sql文件 
(2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。 
(3)导入auction.sql文件 
    c:mysqlbin>mysql -u root -p auction < auction.sql。 
   通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。    

2.修改数据库

(1)在mysql的表中增加字段: 
   alter table dbname add column userid int(11) not null primary key auto_increment; 
   这样,就在表dbname中添加了一个字段userid,类型为int(11)。 

3.mysql数据库的授权

 mysql>grant select,insert,delete,create,drop 
   on *.* (或test.*/user.*/..) 
   to 用户名@localhost 
   identified by \'密码\'; 
   如:新建一个用户帐号以便可以访问数据库,需要进行如下操作: 
   mysql> grant usage 
   -> ON test.* 
   -> TO testuser@localhost; 
   Query OK, 0 rows affected (0.15 sec) 
   此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作: 
   mysql> GRANT select, insert, delete,update 
   -> ON test.* 
   -> TO testuser@localhost; 
   Query OK, 0 rows affected (0.00 sec) 
   此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序: 
   mysql> exit 
   Bye9!

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

mysql> SHOW DATABASES;

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操作。
下面给出本人从其它资料获得的对常用权限的解释:
全局管理权限:

FILE:      在MySQL服务器上读写文件。
PROCESS:   显示或杀死属于其它用户的服务线程。
RELOAD:     重载访问控制表,刷新日志等。
SHUTDOWN:    关闭MySQL服务。

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

Alter:        修改已存在的数据表(例如增加/删除列)和索引。
Create:       建立新的数据库或数据表。
Delete:       删除表的记录。
Drop:         删除数据表或数据库。
INDEX:        建立或删除索引。
Insert:       增加表的记录。
Select:       显示/搜索表的记录。
Update:       修改表中已存在的记录。

特别的权限:
ALL:         允许做任何事(和root一样)。
USAGE:       只允许登录--其它什么也不允许做。               

MYSQL常用命令

一、连接MYSQL 

格式: mysql -h主机地址 -u用户名 -p用户密码 

  1、例1:连接到本机上的MYSQL

  首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>   

  2、例2:连接到远程主机上的MYSQL

 

假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。
则键入以下命令:             mysql
-h110.110.110.110 -uroot -pabcd123(注:u与root可以不用加空格,其它也一样)

  3、退出MYSQL命令: exit (回车)

二、修改密码  

 

格式: mysqladmin -u用户名 -p旧密码 password 新密码  

 例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令   
    mysqladmin -uroot -password ab12   注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。   

 例2:再将root的密码改为djg345
    mysqladmin -uroot -pab12 password djg345

 

MYSQL常用命令(下)
一、操作技巧

  1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

  2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。

二、显示命令

  1、显示数据库列表。

show databases;

刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

  2、显示库中的数据表:

use mysql; //打开库,学过FOXBASE的一定不会陌生吧

show tables;

  3、显示数据表的结构:

describe 表名;

  4、建库:

create database 库名;

  5、建表:

use 库名;
create table 表名 (字段设定列表);

  6、删库和删表:

drop database 库名;
drop table 表名;

  7、将表中记录清空:

delete from 表名;

  8、显示表中的记录:

select * from 表名;

三、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default \'深圳\',
year date
); //建表结束
//以下为插入字段
insert into teacher values(\'\',\'glchengang\',\'深圳一中\',\'1976-10-10\');
insert into teacher values(\'\',\'jack\',\'深圳一中\',\'1975-12-23\');

注: 在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key
  (2)将NAME设为长度为10的字符字段
  (3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。
  (4)将YEAR设为日期字段。

  如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:
  mysql -uroot -p密码 < c:\\school.sql
  如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

四、将文本数据转到数据库中

  1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.  

例:

rose 北京一 1976-10-10
mike 北京二 1975-12-23

 

  2、数据传入命令 load data local infile "文件名" into table 表名;
  注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库 。

五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)

mysqldump --opt school>school.bbb
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

一.SELECT语句的完整语法为: 

SELECT[ALL|DISTINCT|DISTINCTROW|TOP] 
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]} 
FROM tableexpression[,…][IN externaldatabase] 
[WHERE…] 
[GROUP BY…] 
[HAVING…] 
[ORDER BY…] 
[WITH OWNERACCESS OPTION]

说明: 
用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。 
1 FROM子句 
FROM 子句指定了SELECT语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。 
例:下列SQL语句返回所有有定单的客户: 

SELECT OrderID,Customer.customerID 
FROM Orders Customers 
WHERE Orders.CustomerID=Customers.CustomeersID

2 ALL、DISTINCT、DISTINCTROW、TOP谓词 
(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。 
例:

SELECT ALL FirstName,LastName 
FROM Employees 

(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。 
(3) DISTINCTROW 如果有重复的记录,只返回一个 
(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比) 
例:返回5%定货额最大的定单 

SELECT TOP 5 PERCENT* 
FROM [ Order Details] 
ORDER BY UnitPrice*Quantity*(1-Discount) DESC

3 用 AS 子句为字段取别名 
如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。 
例:

返回FirstName字段取别名为NickName 
SELECT FirstName AS NickName ,LastName ,City 
FROM Employees 

例:返回新的一列显示库存价值 

SELECT ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock 
FROM Products

4.order:排序

按指定的列进行,排序的列即可是表中的列名,也可以是select语句后指定的别名。

-- 语法:

select *|field1,field2... from tab_name order by field [Asc|Desc]

         -- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。

示例:

-- 按年龄从高到低进行排序
SELECT * FROM emp ORDER BY age DESC ;

-- 按工资从低到高进行排序
SELECT * FROM emp ORDER BY salary;

5.group by:分组查询(*****)

GROUP BY 语句根据某个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG等函数进行相关查询。

-- 语法:
  SELECT column_name, function(column_name)
        FROM table_name
        WHERE column_name operator value
        GROUP BY column_name;

6.limit记录条数限制

SELECT * from ExamResult limit 1;
SELECT * from ExamResult limit 2,5;        --  跳过前两条显示接下来的五条纪录
SELECT * from ExamResult limit 2,2;

二 .WHERE 子句(过滤查询)

-- where字句中可以使用:

         -- 比较运算符:
                        > < >= <= <> !=
                        between 80 and 100 值在10到20之间
                        in(80,90,100) 值是10或20或30
                        like \'yuan%\'
                        /*
                        pattern可以是%或者_,
                        如果是%则表示任意多字符,此例如唐僧,唐国强
                        如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__
                        */

         -- 逻辑运算符
                        在多个条件直接可以使用逻辑运算符 and or not

1 比较运算符 

比较运算符 含义 
                =     等于 
                >     大于 
                <     小于 
                >=  大于等于 
                <=  小于等于 
                <>  不等于 
                !>   不大于 
                !<   不小于             

例:返回96年1月的定单 

SELECT OrderID, CustomerID, OrderDate 
FROM Orders 
WHERE OrderDate>#1/1/96# AND OrderDate<#1/30/96# 

注意: 

Mcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。 

例: 

WHERE OrderDate>#96-1-1# 
也可以表示为: 
WHERE OrderDate>Datevalue(‘1/1/96’) 

使用 NOT 表达式求反。例:查看96年1月1日以后的定单 

WHERE Not OrderDate<=#1/1/96# 

2 范围(BETWEEN 和 NOT BETWEEN) 
BETWEEN …AND…运算符指定了要搜索的一个闭区间。例:返回96年1月到96年2月的定单。  

WHERE OrderDate Between #1/1/96# And #2/1/96#

3 列表(IN ,NOT IN) 
IN 运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。 
例:要找出住在 London、Paris或Berlin的所有客户 

SELECT CustomerID, CompanyName, ContactName, City 
FROM Customers 
WHERE City In(‘London’,’ Paris’,’ Berlin’) 

4 模式匹配(LIKE) 
LIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。 
LIKE运算符里使用的通配符 

通配符 含义 
        ?        任何一个单一的字符 
        *        任意长度的字符 
        #        0~9之间的单一数字 
       [字符列表]    在字符列表里的任一值 
       [!字符列表]   不在字符列表里的任一值 
       - 指定字符范围,两边的值分别为其上下限 

例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户 

SELECT CustomerID ,CompanyName,City,Phone 
FROM Customers 
WHERE Phone Like ‘(171)555-####’ 
LIKE运算符的一些样式及含义 
样式 含义 不符合 
LIKE ‘A*’ A后跟任意长度的字符 Bc,c255 
LIKE’5[*]’ 5*5 555 
LIKE’5?5’ 5与5之间有任意一个字符 55,5wer5 
LIKE’5##5’ 5235,5005 5kd5,5346 
LIKE’[a-z]’ a-z间的任意一个字符 5,% 
LIKE’[!0-9]’ 非0-9间的任意一个字符 0,1 
LIKE’[[]’ 1,* 

三 .用ORDER BY子句排序结果 
ORDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。 
ORDER子句中定义了多个字段,则按照字段的先后顺序排序。 
例: 

SELECT ProductName,UnitPrice, UnitInStock 
FROM Products 
ORDER BY UnitInStock DESC , UnitPrice DESC, ProductName 
ORDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。

例:下面的语句产生与上列相同的效果。 

SELECT ProductName,UnitPrice, UnitInStock 
FROM Products 
ORDER BY 1 DESC , 2 DESC,3 

四 .运用连接关系实现多表查询 
例:找出同一个城市中供应商和客户的名字 

SELECT Customers.CompanyName, Suppliers.ComPany.Name 
FROM Customers, Suppliers 
WHERE Customers.City=Suppliers.City 

例:找出产品库存量大于同一种产品的定单的数量的产品和定单