MySQL语法格式总结

1.show databases;查找本地数据库

2.create database database_name;创建数据库

3.show create database database_name\G 显示数据库的创建信息

4.drop database database_name;删除数据库

5.SHOW ENGINE\G  查看系统所支持的引擎类型

6.show variables like 'storage_engine'; 查看默认存储引擎

7.use database_name;选择创建表的数据库

8.create table table_name

(id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25));

创建表并且设置id为主键,自动增加1

9.CONSTRAINT 约束名 FOREIGN KEY (no主键) REFERENCES table_name(主键)

为表创建外键约束,使两个表有关联。

10.desc table_name;查看数据表的结构

11.show create table te6\G  查看数据表的详细结构

12.alter table te6<旧表名> rename te9<新表名>; 改变数据表名

13.alter table te9<表名> modify name<字段名> varchar(30);修改字段的数据类型

14.alter table te9<表名> change <旧字段名> <新字段名> <新数据类型>;修改字段名

15.alter table <表名>  add <新字段> <数据类型> [约束条件] [first | after 已存在的字段名];添加字段 

例:alter table te9 add wangxiang varchar(20) after nm;

16.alter table <表名> drop <字段名>;删除字段

17.alter table <表名> modify <字段1> <数据类型> first|after <字段2>;修改字段的排列位置

18.alter table <表名> engine = <更改后的存储引擎>; 更改表的存储引擎

19.alter table <表名> drop foreign key <外键约束名>;删除表的外键约束

20.drop table [if exists] 表1,表2,....表n;删除没有关联的数据表 

 

*数据库支持的存储引擎是什么?原理是什么?有多少种存储引擎?各有什么优缺点?


21.create table  te1(x tinyint, y smallint, z mediumint, m int, n bigint);数据库类型

22.create table  te2(x float(m,n), y double(m,n), z decimal(m,n)); M是精度,表示总共的位数;N是标度,表示小数的位数


*数据库定义数据的语法公式:字段名+数据类型(各种类型)

*MySQL运算符:算数运算符、比较运算符、逻辑运算符、位运算符(位与&,位或|,位非~,位异或^,左移<<,右移>>)。


23.select num,num+10,num-3+5,num+5-3 from te3; 使用算术运算符举例

24.位运算是二进制0与1的异或非运算

25.select 1<<2,4<<2;1的二进制是0000 0001,左移两位之后变成0000 0100,即十进制整数4;

十进制4左移两位之后变成0001 0000,即变成十进制16;

左移指定的位数之后,左边高位的数值将被移出丢弃;位右移运算符同理

26.select 5&~1; 位取反运算符,先对1进行取反,再与5进行位与运算,涉及到运算符的优先级,不了解的请上网学习

     MySQL函数

27.select abs(2),abs(-2),abs(-3.2);绝对值函数

28.select pi();返回圆周率

29.select sqrt(9),sqrt(-49);平方根函数

30.select mod(31,8),mod(234,10);求余函数

31.select ceil(-3.35),ceil(3.35);返回不小于x的最小整数值

32.select floor(-3.35),floor(3.35);返回不大于x的最大整数值

33.select rand(),rand(),rand();产生随机数,在0与1之间

34.select rand(10),rand(10),rand(30);rand(x)函数,如果x值相同,则产生的随机数也相同

35.select round(-1.14),round(1.14),round(1.66);将x值进行四舍五入

36.select round(1.38,1),round(1.38,0),round(232.38,-1),round(232.38,-2);

round(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位

37.select truncate(1.99,1),round(1.38,1),round(19.99,-1);该函数直接截取值,并不进行四舍五入

38.select sign(x);符号函数

39.select pow(x,y)或者power(x,y);幂函数的运算

40.select exp(x);使用exp()函数计算e的乘方

41.select log(x);计算自然对数

42.select radians(角度);radians(函数将角度转为弧度)

43.select degrees(pi()),degrees(pi()/2);将弧度转化为角度

44.select sin(x);正弦函数

45.select asin(x);反正弦函数

46.select cos(x);余弦函数 

47.select acos(x);反余弦函数

48.select tan(x);正切函数

49.select atan(x);反正切函数

50.select cot(x);余切函数

51.select char_length('data'),char_length('egg');计算字符串字符个数

52.select length('data'),length('egg');计算字符串长度

53.select concat('mysql','5.6'),concat('my',NULL,'SQL');concat()函数链接字符串,在字符串中有NULL,返回为NULL

54.select concat_ws('-','1','2','3');

55.select insert('Quest',2,4,'what') as col1,

   >insert('Quest',-1,4,'what') as col2,

   >insert('Quest',3,100,'what') as col3;

 *insert(s1,x,len,s2)返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。

如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,

则从位置x开始替换。若任何一个参数为NULL,则返回值为NULL

56.select lower/lcase('AA');将大写字母转化为小写字母

57.select upper('aa'),ucase('ss');将小写字母转化为大写字母

58.select left(s,n); select right(s,n);获取指定长度的字符串函数 

59.select lpad(s1,len,s2);select rpad(s1,len,s2);填充字符串函数,左侧填充,右侧填充

60.ltrim和rtrim函数删除字符串两侧的空格;trim(s1 from s);删除字符串两端指定的字符,返回的是s字符串

61.select repeat(s,n);重复生成字符串,s是字符串,n是重复的次数

62.select concat('(',space(6),')');返回一个由n个空格组成的字符串

63.select replace('wangxiang','w','z');替换函数

64.strcmp('s1','s2');函数比较字符串大小;substring(s,n,len)和mid(s,n,len)获取子串,n是位置,len是长度;

locate(str1,str)匹配子串开始位置的函数;reverse(s)字符串逆序的函数;elt(n,'s1','s2','s3');返回指定位置的字符串;

fiele(s,s1,s2,...)返回指定字符串位置的函数;make_set(x,s1,s2,s3...);选取字符串的函数

65.select version();获取mysql版本号、连接数和数据库名的函数

66.select connection_id();查看当前用户的连接数

67.show processlist;输出当前用户的连接信息

68.select database(),schema();显示当前的数据库

69.select user();获取当前登录用户名

70.select password('wangxiang');加密函数

71.select md5('wangxiang');MD5加密

72.select encode('sercret','cry'),length(encode('secret','cry'));encode(str,pswd_str)使用pswd_str作为密码,加密str,

使用decode()解密结果结果是一个和str长度相同的二进制字符串

73.select decode(encode('str','pswd_str'),'pswd_str');解密函数,先加密,再解密  

    查询数据

74.select {*|<字段列表>}[from <表1>,<表2>...] [where <表达式>] [group by <group by definition>]

[having <expression>] [order by<order by defintion>] [limit[offset], <row count>] ]

group by<字段>,该子句显示查出来的数据,并按照指定的字段分组

order by<字段>,该子句告诉mysql按什么样的顺序显示查询出来的数据,可以进行的排序有:升序(asc)、降序)(desc)

[limit[<offset>,]<row count>], 显示查询出来的数据条数

75.create table fruits(f_id char(10) not null,s_id int not null,f_name char(255) not null,f_price decimal(8,2) not null,primary key(f_id));

创建一个表

76.insert into fruits(f_id,s_id,f_name,f_price) ->values('a1',101,'apple',5.2)向表中插入数据

77.select * from 表名; 单表查询所有字段

78.select 字段1,字段2,字段3....from  表名;查询多个字段

79.select 字段1,字段2,字段3....from  表名 where 查询条件;条件判断符(=、<>、<、>、<=、>、>=、between位于两值之间)

80.select 字段1,字段2,字段3....from  表名 where 字段名 in(检索条件1,检索条件2.....);带in关键字的查询

81.select 字段1,字段2,字段3....from  表名 where 字段名 between 2 and 4;查询2和4之间的数据,范围查询

82.select f_id,f_name from fruits where f_name like 'b%';

和Like一起使用的通配符‘%’、‘_’,该语句查询的结果返回所有以b开头的水果的id和name,“%”告诉Mysql,返回所有以字母b开头的记录,不管b后面有多少字符。

在搜索匹配是通配符“%”可以放在不同的位置。

*百分号通配符“%”,匹配任意长度的字符,甚至包括零字符;下划线通配符‘_’,一次只能匹配任意一个字符

*数据表创建的时候,设计者可以指定某列中是否可以包含空值(null)。控制不同于0,也不同于空字符串。空值一般表示数据未知、不适用或将在以后添加数据。

在select语句中使用is null子句,可以查询眸子段内容为空记录。

例如:select id,name,email from customers where email IS NULL;

或者查询不是空值:select id,name,email from customers where email IS NOT NULL;

83.select f_id,f_price,f_name from fruits where s_id='101' and f_price>=5;带and的多条查询语句

84.select s_id,f_price,f_name from fruits where s_id=101 or s_id=102;带OR的多条件查询

*OR操作符和IN操作符可以实现相同的功能。但是使用in操作符使得检索语句更加简明,并且in执行的速度要快于or,更重要的是使用in操作符,可以执行更加复杂的嵌套查询。

85.select distinct s_id from 表名;distinct关键字使查询结果不重复

86.select f_name from fruits order by f_name;order by按字母的顺序升序排列,默认是升序排列

87.select f_name,f_price from fruits order by f_name,f_price;多列排序,在对多列进行排序的时候们首先排序的第一列必须有相同的列值,才会对第二列进行排序。

如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

88.select f_name,f_price from fruits order by f_name,f_price desc;指定排序方向,f_price按降序排列,f_name列仍按升序排列(ASC生序排列,关键字,默认)

89.[GROUP BY 字段][HAVING <条件表达式>]  分组查询,该关键字通常和集合函数一起使用,列如:MAX()、MIN()、COUNT()、SUM()、AVG()。

90.select s_id,COUNT(*) as total from fruits group by s_id;

91.select s_id,GROUP_CONCAT(f_name) as total from fruits group by s_id;显示字段的名称

92.select s_id,GROUP_CONCAT(f_name) as total from fruits group by s_id HAVING COUNT(f_name>1);使用HAVING过滤分组

93.select s_id,COUNT(*) as total from fruits group by s_id WITH ROLLUP; 使用with rooup关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出来的所有记录的总和。

94.select * from fruits group by s_id,f_name;多字段分组                                         

95.LIMIT[位置偏移量] 行数; 第一个位置偏移量参数标识MySql从哪一行开始显示,是一个可选参数,如果不指定位置偏移量,将会从表中的第一条记录开始(第一条记录的位置偏移量是0),第二条记录的位置偏移量是1....以此类推);

第二个行数指示返回的记录条数。例如:select * from fruits LIMIT 2,2;从第三行开始,返回两行。

96.select COUNT(*) as cust from customers;使用COUNT()函数;select SUM(字段) as cust from customers;使用SUM(函数);

其他函数语法

  连接查询

*连接是关系型数据库模型的主要特点。一个实体一个表,连接实体

一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。

先说左外连接和右外连接:

[TEST1@orcl#16-12月-11] SQL>select * from t1;


        ID NAME

---------- --------------------

         1 aaa

         2 bbb


[TEST1@orcl#16-12月-11] SQL>select * from t2;


        ID        AGE

---------- ----------

         1         20

         3         30

左外连接:

[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id;


        ID NAME                         ID        AGE

---------- -------------------- ---------- ----------

         1 aaa                           1         20

         2 bbb

右外连接:

[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id;


        ID NAME                         ID        AGE

---------- -------------------- ---------- ----------

         1 aaa                           1         20

                                         3         30


从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。

右外连接过程正好相反。


再看内连接(也称为等值连接):


[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id;


        ID NAME                         ID        AGE

---------- -------------------- ---------- ----------

         1 aaa                           1         20


看到没有?  只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id  那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。


上条sql语句等价于:


select * from t1,t2 where t1.id = t2.id

详情请查看:http://www.gwalker.cn/article-72.html


97.(1)子查询中常用的操作符有ANY(SOME)、ALL、IN、EXISTS;(2)带比较运算符的子查询

98.select num1 from tb1 where num1>ANY(select num2 from tb2);返回的是tb2表的所有num2列结果,然后将tb1中的num1列的值与之进行比较,只要大于num2列的任意一个数即为符合条件的结果

  ALL操作符是必须大于所有的结果

*合并查询结果,UNION关键字,合并时,两个表对应的列数和数据类型必须相同。

99.select column,....from table UNION[ALL] select column,....from table2;使用ALL是不删除重复行,所有返回的行都显示

100.select c.c_id,o.o_num from customers AS c LEFT OUTER JOIN orders AS o on c.c_id=o.c_id;分别为外连接的表去别名,用AS关键字

*语法格式:表名/字段名 [AS] 表别名/字段名

101.select * from fruits where f_name REGEXP '^b';字符^查询f_name字段以字母b为开头的记录

102.select * from fruits where f_name REGEXP 'y$';字符$匹配以特定字符或者字符串结尾的文本

103.select * from fruits where f_name REGEXP 'b.a';字符'.'匹配任意单个字符,位于字母b与a之间

*Mysql中使用REGEXP关键字指定正则表达式的字符匹配模式

104.'*'匹配零个或多个在他前面的字符,例如:'f*n'字符n前面有任意个字符f

105.'+'匹配前面的字符1次或多次,例如:'ba+'匹配以b开头后面紧跟至少有一个a

106.<字符串>匹配包含指定字符串的文本

107.[字符集和]匹配字符集合中的任何一个字符,例如:[xz]匹配x或者z

108.[^]匹配不在括号中的任何字符,例如:[^abc]匹配任何不包含a、b或c的字符串

109.字符串{n,}匹配前面的字符串至少n次,例如:b{2}匹配两个或更多的b

110.字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数

   插入、更新与删除函数

111.insert into table_name(column_list) values(value_list);为表的所有字段插入数据

112.insert into table_name(column_list) values(value_list1),(value_list2),...(value_list1n);同时插入多条记录

113.insert into table_name1(column_list) select (column_list2) from table_name2 where (condition);将查询结果插入到表中

例如:insert into person(id,name,age,info) select id,name,age,info from person_old;

114.update table_name set column_name1=value1,column_name2=value2,...column_namen=valuen where (condition);更新数据

例如:update fruits set f_name='student' where s_id between 101 and 104;

115.delete from table_name[where <condition>];删除数据

例如:delete from fruits where s_id = 101;


你可能感兴趣的:(数据库,mysql,最全语法)