1.建立数据库:
create database XXX;
USE Databasename;
2.建立表:
create table table_name(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
.... );
3.插入数据:
a.原有数据插入:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename;
b.或者只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename;
c.探究SQL插入(insert)大量数据时的效率问题:
http://www.jianshu.com/p/3a7fb9d7d91f
d.insert into.....
INSERT INTO 表名称 VALUES (值1, 值2,....);
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
4.更新表的内容:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
5.删除表中的数据:
DELETE FROM 表名称 WHERE 列名称 = 值;
6.查询数据:
a.指定行:
sql server:SELECT TOP number|percent column_name(s) FROM table_name;
my sql:select * from table_name limit 3,1; #跳过前3条数据,从数据库中第4条开始查询,取一条数据,即第4条数据
b.模糊查询:
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
通配符:
%: 替代一个或多个字符
_ :仅替代一个字符
[charlist]:字符列中的任何单一字符
[^charlist]或者[!charlist]:不在字符列中的任何单一字符
正则表达式:
http://www.cnblogs.com/shimily/articles/6553514.html
属性名 REGEXP ‘匹配方式’
正则表达式的模式字符 含义
^ 匹配字符串开始的部分
$ 匹配字符串结束的部分
. 代表字符串中任意一个字符,包括回车和换行
[字符集合] 匹配”字符集合”中的任何一个字符
[^字符集合] 匹配除了“字符集合”以外的任何一个字符
S1|S2|S3 匹配S1、S2和S3中的任意一个字符串
- 代表多个该符号之前的字符,包括0和1个
- 代表多个该符号之前的字符,包括1个
字符串{N} 字符串出现N次
字符串{M,N} 字符串出现至少M次,最多N次
c.条件查询:
----IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN(value1,value2,...);
----BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2;:
----group by,Having:
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;
d.查询条件:
比较 =、<、<=、>、>=、!=、<>、!<、!>
指定范围 BETWEEN AND、NOT BETWEEN AND
指定集合 IN、NOT IN
匹配字符 LIKE、NOT LIKE(只能匹配字符串,%代表任意长度,_代表单个字符)
是否为空值 IS NULL、IS NOT NULL
多个查询条件 AND、OR(SQL总是会先处理AND操作符!!!然后才会处理OR操作符)
限制条件 LIMIT
查询结果不重复:SELECT DISTINCT num FROM grade;
where 后限定的条件:WHERE EXISTS(NOT EXISTS),WHERE score >=ANY,WHERE score>=ALL (SELECT score FROM scholarship)
7.数据类型:
http://www.w3school.com.cn/sql/sql_datatypes.asp
常用:my sql:varchar(),Int(),date(),double()
8.表约束:
NOT NULL:非空。
UNIQUE:唯一。
PRIMARY KEY:唯一,不为NULL,每个表都应有一个主键,并且每个表只能一个。
FOREIGN KEY:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
CHECK:用于限制列中的值的范围。
DEFAULT:例如:字段名 DEFAULT 'Sandnes',
备注:请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
9.索引:
a.在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name ON table_name (column_name);
b.在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
c.删除索引:
my sql:ALTER TABLE table_name DROP INDEX index_name;
sql server:DROP INDEX table_name.index_name;
10.sql 日期:
http://www.w3school.com.cn/sql/sql_dates.asp
11.sql函数:
http://www.w3school.com.cn/sql/sql_functions.asp
Eg:
a.在MySql中连接要是用CONCAT函数:
SELECT OrderID,FirstName,LastName,
CONCAT(FirstName,' ',LastName) AS 'fullname'
FROM orders
b.字符函数:left(字段,几个),right(字符, 几个),LTRIM(CharacterValue)
可以删除左边开始的空格,RTRIM作用类似;SUBSTRING('thewhitegoat',4,5)返回white
c,日期函数:
----GETDATE()返回当前日期和时间。
PS:在MySql中,等价函数是NOW,在Oracle中是CURRENT_DATE。
----DATEPART(datepart,DateValue)--(datepart可以是year,month,quarter,day,dayofyear,week,weekday,hour,minute,second);
----DATEDIFF可以让我们得到任意两个日期之间相差的天数(或周数、月数等)。
DATEDIFF(datepart1,startdate1,startdate2)
DATEDIFF(day,'7/8/2009','8/14/2009') 37
PS:MySql中,DATEDIFF函数只允许我们计算两个日期之间的天数,如果想要得到一个正数,结束的日期通常要作为第一个参数:
DATEDIFF(enddate,startdate)
Oracle中没有等价函数
d.转换函数:
----CAST函数:允许我们把数据从一种类型转换成另一种类型。
CAST(expression AS DateType)
例子:SELECT '2009-04-11' AS 'Original Date',
CAST('2009--04-11' AS DATETIME) AS 'Converted Date';
----isnull:SELECT Description,ISNULL(Color,'Unknown') AS 'Color' FROM Products;
e.CASE表达式对于把不好理解的值转换成有意义的描述是很有用的。
SELECT
CASE CategoryCode
WHEN 'F' THEN 'Fruit'
WHEN 'V' THEN 'Vegetable'
ELSE 'other'
END AS 'Category',
ProductDescription As 'Description'
FROM Products;
----CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system;
----CASE ebv.db_no
WHEN 22978 THEN 'WECS 9500'
WHEN 23218 THEN 'WECS 9500'
WHEN 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system;(同上一效果)
12.别名
1)列的别名
SELECT firstname AS fn FROM customers;
2) 表的别名
SELECT firstname FROM customers AS cu;
说明:
列的别名不能在WHERE中使用列的别名,可以在WHERE中使用表的别名进行!
网友评论