Sql Server 2005 学习笔记

---SELECT------------

SELECT result-set 

[FROM Tables] 

[WHERE row-filter] 

[GROUP BY column names] 

[HAVING after-filter on groups] 

[ORDER BY column names]




USE 数据库

SELECT * FROM 表

 

SELECT field_name1,field_name2 FROM table ORDER BY field_name ASC/DESC

 

SELECT dname, sex, age

FROM   Dependent

ORDER  BY sex, age DESC

 

SELECT dname, sex, age

FROM   Dependent

ORDER  BY sex DESC, age DESC

 

--显示系统当前日期和时间

SELECT GETDATE()

 

 

SELECT col1=100, col2=200

 

SELECT 'A', 'B'

 

SELECT 4+3, 4-3, 4*3, 4/3

 

SELECT Additions=4+3, Subtractions=4-3, Multiplications=4*3, Divisions=4/3

 

 

-------WHERE--------------


SELECT column-names

FROM   Table

WHERE  criteria



> (greater than)

 

<> not equal

 

= equal

 

>= greater than or equal to

 

<= less than or equal to

 

 

---ORDER BY---------

 

SELECT   dname, age

FROM     Dependent

WHERE    age <= 5

ORDER BY age

 

 

---AND-------

 

SELECT *

FROM   Dependent

WHERE  age <= 5

AND    sex = 'F'

 

 

--OR--------

 

SELECT *

FROM   Dependent

WHERE  age >20

OR     sex = 'F'

 

 

---BETWEEN---------

 

SELECT  dname, age

FROM    Dependent

WHERE   age

BETWEEN 3 AND 5

 

 

SELECT dname, age

FROM   Dependent

WHERE  age

NOT BETWEEN 3 AND 15

 

 

---COUNT(字段)------

 

SELECT COUNT(*)

FROM   Dependent

 

 

---NULL----------

 

SELECT dname, age

FROM   Dependent

WHERE  age IS NULL

 

 

---NOT NULL--------

 

SELECT dname, age

FROM   Dependent

WHERE  age IS NOT NULL

 

 

---ROWCOUNT---------

 

SET ROWCOUNT 10

SELECT *

FROM   Dependent

 

After using ROWCOUNT, you should reset the ROWCOUNT property by:

 

SET ROWCOUNT 0

 

 

---Aliases(别名)---------

 

SELECT dname AS "Dependent Name", age AS "Dependent Age", sex AS "Dependent Sex"

FROM   Dependent

WHERE  age > 5

 

 

SELECT dname 'Dependent Name', age 'Dependent Age', sex 'Dependent Sex'

FROM   Dependent

WHERE  age > 5

 

 

SELECT [Dependent Name] = dname, [Dependent Age] = age, [Dependent Sex] = sex

FROM   Dependent

WHERE  age > 5

 

 

SELECT Name = dname, Age = age, Sex = sex

FROM   Dependent

WHERE  age > 5

 

 

SELECT d.dname

FROM   Dependent d

WHERE  d.age > 5

 

 

---Synonyms(同义词)-----------

 

CREATE SYNONYM synonym_name

FOR Table_name

 

 

CREATE SYNONYM s1

FOR Student

 

 

DROP SYNONYM synonym_name

 

DROP SYNONYM s1

 

 

---加注释------------

 

SELECT *            -- displays "all" attributes

FROM   Dependent d  -- of the Dependent table

WHERE  d.age > 5    -- where the age of the dependent is greater than 5.

 

SELECT dname, age            /* displays the dependent name and age  */

FROM   Dependent d          /* from the Dependent table     */

WHERE  d.age > 5              /* where the age of the dependent is greater than 5 */

 

 

---数据类型--------

 

1.整型

 

BIGINT, which uses 8 bytes of storage and can be used to store numbers from -263 to 263 -1. Avoid using the BIGINT data type unless you really need its additional storage capacity.

 

INT(INTEGER), which uses 4 bytes of storage and can be used to store numbers from -231 to 231 -1.

 

SMALLINT, which uses 2 bytes of storage and can be used to store numbers from -215 to 215 -1.

 

TINYINT, which uses 1 byte of storage and can be used to store numbers from 0 to 255.

 

MONEY, which uses 8 bytes of storage.

 

SMALLMONEY, which uses 4 bytes of storage.

 

 

2.小数

 

REAL, which uses 4 bytes for storage and has a precision of 7 digits. The synonym for REAL is FLOAT[(n)] for n = 1 to 7.

 

FLOAT, which uses 8 bytes for storage and has a precision of 15 digits. The synonym for FLOAT is DOUBLE PRECISION and FLOAT[(n)] for n = 8 to 15.

 

DECIMAL, whose storage size varies based on the specified precision and uses 217 bytes for storage. The synonyms for DECIMAL are DEC and NUMERIC.

 

 

3.字符型

 

CHAR(CHARACTER),CHAR(n)s are fixed-length single-byte character strings that can be used to store up to 8,000 bytes of data.

 

VARCHAR()

 

 

TEXT . TEXTs are also variable-length single-byte character strings, but may be used to store more than 8,000 bytes.

 

NCHAR(NATIONAL CHAR) . NCHARs are fixed-length Unicode character strings .

 

NVARCHAR(NATIONAL CHARACTER VARYING) . NVARCHARs are variable-length Unicode character strings.

 

4.时间类型

 

DATETIME


SMALLDATETIME


5.混合类型


BINARY

BINARY data types are used to store strings of bits, and values are entered and displayed using their hexadecimal (hex) representation. The maximum length of the BINARY data type is 8,000 bytes. You can specify the maximum byte length of BINARY data with n.


 

 

VARBINARY

The VARBINARY data type can store up to 8,000 bytes of variable-length binary data. Once again, you can also specify the maximum byte length with n. The VARBINARY data type should be used (instead of the BINARY data type) when you expect to have null values or a variation in data size.

 


IMAGE

The IMAGE data type is a large object binary data type that stores more than 8000 bytes. The IMAGE data type is used to store binary values and is also used to store pictures.


BIT 


The BIT data type is actually an integer data type that can store only a 0 or a 1 and can consume only a single bit of storage space. However, if there is only a one bit column in a table, it will actually take up a whole byte. Up to 8-bit columns are stored in a single byte. The BIT data type is usually used for true/false or yes/no types of data. BIT columns cannot be NULL and cannot have indexes on them.


MONEY, which uses 8 bytes of storage


SMALLMONEY, which uses 4 bytes of storage


TABLE 

 

The TABLE data type can be used to store the result of a function and can be used as the data type of local variables. Columns in tables, however, cannot be of type TABLE. Table variables are sometimes preferable to temporary tables, because table variables are cleaned up automatically at the end of a function or stored procedure.

 

SQL_VARIANT

 

Values stored in a SQL_VARIANT column can be any data type except TEXT or IMAGE. The usage of the SQL_VARIANT data type should be avoided for several reasons: (a) a SQL_VARIANT column cannot be part of a primary or foreign key; (b) a SQL_VARIANT column cannot be part of a computed column; (c) a SQL_VARIANT column can be used in indexes or as other unique keys only if they are shorter than 900 bytes; (d) a SQL_VARIANT column must convert the data to another data type when moving data to objects with other data types.

 

UNIQUEIDENTIFIER 

 

The UNIQUEIDENTIFIER data type, also referred to as globally unique identifier (GUID) or universal unique identifier (UUID), is a 128-bit generated value that guarantees uniqueness worldwide, even among unconnected computers.

 

XML 

 

The XML data type is a new data type that has been added to SQL Server 2005 to handle XML data. XML can model complex data. The XML column can be typed or untyped. Like other data types, the XML data type must meet specific formatting criteria. It must conform to well-formatted XML criteria (which is untyped) and you can optionally add additional conformance criteria by specifying a Schema collection (typed). SQL Server will also allow you to store XML documents associated with multiple schema definitions. The XML data type will allow you to store complete XML documents or fragments of XML documents. XML documents are limited to two gigabytes of data.

 

---创建表----------

CREATE TABLE Tablename (column_name type, column_name, type, .....)

 

CREATE TABLE Employee (names            VARCHAR(20), 

                       address          VARCHAR(20),

                       employee_number    INT,

                       salary               SMALLMONEY)

 

CREATE TABLE Test2 (name VARCHAR(20), 

                    ssn CHAR(9), 

                    dept_number INT NOT NULL, 

                    acct_balance SMALLMONEY)

 

ALTER TABLE Tablename ALTER COLUMN column_name column_type(size) NOT NULL

 

CREATE TABLE Test2a (ssn CHAR(9) CONSTRAINT ssn_pk PRIMARY KEY, 

                     name VARCHAR2(20), etc.

 

CREATE TABLE Test2a (ssn CHAR(9), blah blah .., acct_balance NUMBER, CONSTRAINT ssn_pk PRIMARY KEY (ssn))

 

ALTER TABLE Tablename ADD CONSTRAINT constraint_name PRIMARY KEY (column_name(s))

 

ALTER TABLE Test2 ADD CONSTRAINT ssn_pk PRIMARY KEY (ssn)

 

ALTER TABLE Test2 

ALTER COLUMN ssn CHAR(9) NOT NULL

 

CREATE TABLE Test2a (ssn CHAR(9) PRIMARY KEY, 

                     salary INT PRIMARY KEY)

 

---INDEX-----------------------------------

CREATE INDEX index_name 

ON Tablename (column [ASC | DESC])

 

CREATE UNIQUE INDEX ssn_ndx1 

ON Test1 (ssn DESC)

 

DROP INDEX Table_name.index_name

 

---插入数据-------

INSERT INTO TableName VALUES ('character_attribute_value', numeric_attribute_value, ...)

 

INSERT INTO Names VALUES ('Joe Smith')

 

INSERT INTO Employee VALUES (2500, 'Joe Smith', 101, '123 4th St.'

 

INSERT INTO Employee VALUES ('Joe Smith', null, 101, null)

 

----

INSERT INTO target_table(column1, column2, column3, ...) "SELECT clause"

 

INSERT INTO Names(fullname) SELECT names FROM Employee WHERE salary > 2600

 

INSERT INTO Emp2 SELECT * FROM Emp1

 

---更新数据---------

UPDATE TableName SET fieldname...

 

UPDATE Employee SET salary = 0 WHERE employee_number=101

 

---ALERT-------

 

ALTER TABLE Tablename ADD column-name type -- 增加列

 

ALTER TABLE Employee ADD bonus SMALLMONEY

 

ALTER TABLE Tablename ALTER COLUMN column-name new_type -- 修改列的类型

 

ALTER TABLE EMPLOYEE ALTER COLUMN bonus FLOAT

 

ALTER TABLE Tablename DROP column column-name

 

---删除数据----------

DELETE FROM Table WHERE (condition)

 

DELETE FROM Employee

 

DROP TABLE Tablename

 

DROP TABLE Names

 

---JOIN------------

SELECT columns FROM table1 JOIN table2 ON table1.column1=table2.column1

 

SELECT * FROM Course c JOIN Prereq p ON c.course_number=p.course_number

 

---INER JOIN-----------

SELECT columns FROM table1 INNER JOIN table2 ON table1.column1=table2.column1

 

-- 用WHERE替代JOIN

SELECT * FROM Course c, Prereq p WHERE c.course_number= p.course_number

 

 

 

 

 

 

 

 

 

---CROSS JOIN-------------

SELECT * FROM Table1 CROSS JOIN Table2

 

---Self Joins(自身连接)--------------

SELECT 'SENIORITY' = x.sname + ' is in a higher class than ' + y.sname FROM Student AS x, Student AS y WHERE y.class = 3 AND x.class > y.class

 

---ORDER BY----------

SELECT c.course_name, c.course_number, c.credit_hours, c.offering_dept, p.prereq FROM Course c JOIN Prereq p ON c.course_number=p.course_number ORDER BY c.course_number

 

SELECT c.course_name, c.course_number, c.credit_hours, c.offering_dept, p.prereq FROM Course c JOIN Prereq p ON c.course_number=p.course_number ORDER BY 2

 

--ORDER BY 2 means to order by the second column of the result set.

 

 

---Joining Multiple Tables Using a Nested JOIN------------------------------

SELECT columns FROM table1 JOIN (table2 JOIN table3 ON table3.column3=table2.column2) ON table1.column1=table2.column2

 

SELECT c.course_name, c.course_number, d.dname FROM (course c JOIN department_to_major d ON c.offering_dept = d.dcode) JOIN prereq p ON p.course_number = c.course_number

 

---OUTER JOIN-----------------

 

SELECT columns FROM table1 LEFT OUTER JOIN table2 ON table1.column1=table2.column1

 

SELECT columns FROM table1 RIGHT OUTER JOIN table2 ON table1.fieldcolumn1=table2.column1

 

SELECT columns FROM table1 FULL OUTER JOIN table2 ON table1.column1=table2.column1

 

---Aggregate Functions(聚合函数)-------------------

COUNT(*)

SUM

AVG

MIN

MAX


---Row-Level Functions-------------

SELECT wage, (wage + 5) AS [wage + 5] FROM Employee

ROUND -- 四舍五入


CEILING(attribute), which returns the next larger integer value when a number contains decimal places.

FLOOR(attribute), which returns the next lower integer value when a number contains decimal places.

SQRT(attribute), which returns the square root of positive numeric values. -- 平方根

ABS(attribute), which returns the absolute value of any numeric value. -- 绝对值

SQUARE(attribute), which returns a number squared. -- 开平方

 

---ISNULL Function----------

DECLARE @a FLOAT, @b FLOAT SET @a = 3 SET @b = 2 SELECT @a + @b AS 'A + B = '

 

ISNULL(expression1, ValueIfNull)

DECLARE @a FLOAT, @b FLOAT SET @a = NULL SET @b = 2 SELECT ISNULL(@a, 0) + ISNULL(@b, 0) AS 'A + B = '

 

---NULLIF Function-----------------

NULLIF(expression1, expression2)

 

SELECT names, wage, new_wage = NULLIF(wage, 15) FROM Employee -- 等于15的就变为NULL

 

SIN, COS, TAN, LOG


---TOP Function------------

SELECT TOP 2 names, wage FROM Employee ORDER BY wage ASC -- 取最上面两行

SELECT TOP 2 names, wage FROM Employee ORDER BY wage DESC -- 取最下面两行

SELECT TOP 10 PERCENT sname FROM Student ORDER BY sname ASC -- 取百分之10

SELECT TOP 10 PERCENT WITH TIES sname FROM Student ORDER BY sname DESC

 

---DISTINCT Function-----------

SELECT DISTINCT grade FROM Grade_report -- 唯一

 

---String Functions----------

+

SUBSTRING(stringexpression, startposition, length)

LEFT(stringexpression, n)

RIGHT(stringexpression, n)

LTRIM(' Ranu')

RTRIM('Ranu ')

CHARINDEX(' ',names)

UPPER(names)

LOWER(names)

LEN(names)

 

 

---LIKE------------

UPDATE Employee SET WAGE = 10 WHERE names LIKE '%Sudip%' -- %多字符

 

SELECT DISTINCT student_number, grade 

 FROM Grade_report 

 WHERE grade LIKE '[^c-f]' -- ^是非的意思

 AND student_number > 100

 

SELECT sname 

 FROM Student 

 WHERE sname LIKE '[BG]ill' -- B或G开头

 

SELECT DISTINCT student_number, grade 

 FROM Grade_report 

 WHERE student_number LIKE '13_' -- _单字符

 

SELECT * FROM Section WHERE course_num NOT LIKE 'MATH%' AND Course_num NOT LIKE 'C%'

 

---CONVERSION Functions---------

CAST (original_expression AS desired_datatype)

STR(float_expression, character_length, number_of_decimal_places)

CONVERT(desired_datatype[(length)], original_expression [, style])

 

---DATE Functions-------------

SET DATEFORMAT dmy 
SELECT 'Format is yyyy/mon/dd' = CONVERT(datetime, '10/2/2003')

 

 

The date parts are: dd for day, mm for month, and yy for year.

 

DATEADD(datepart, number, date_field)

SELECT names, 'Add 2 days to birthday' = DATEADD(dd, 2, birthdate) FROM Datetable

SELECT names, 'Add 2 days to birthday' = DATEADD(dd, -2, birthdate) FROM Datetable

 

DATEDIFF(datepart, date_field1, date_field2)

SELECT names, 'Months between birth date and school date' = DATEDIFF(mm, birthdate, school_date) FROM Datetable

 

DATEPART(datepart, date_field)

SELECT names, 'YEARS' = DATEPART(yy, birthdate) FROM Datetable

 

YEAR(column)

SELECT names, YEAR(school_date) AS [Kindergarten Year] FROM Datetable

SELECT names, YEAR(school_date)-YEAR(birthdate) AS [Age in Kindergarten] FROM DateTable

 

 

MONTH

SELECT names, birthdate, MONTH(birthdate) AS [Birth Month], ((MONTH(birthdate)) + 6 ) AS [Sixth month] FROM DateTable


DAY

SELECT names, birthdate, DAY([birthdate]) AS [Date] FROM DateTable


GEtdATE

SELECT 'Today ' = GETDATE( )


---VIEW(视图)------------------

CREATE VIEW view_name AS SELECT ...


CREATE VIEW namemaj AS 

 SELECT sname, major 

 FROM Student

 

 

 

 

 

SELECT * FROM namemaj

 

UPDATE Employee_view SET names = 'Mala Saha' WHERE names LIKE 'Priya%'

 

DROP VIEW Employee_view

 

---local temporary tables-----------

SELECT column_name, ..., column_name INTO #local_temporary_tablename 

 FROM permanent_tablename 

 WHERE...

 

SELECT s.sname, s.stno, d.dname, s.class INTO #Temp1 

 FROM Student s, Department_to_major d 

 WHERE s.major = d.dcode 

 AND (s.class = 1 or s.class = 2) 

 AND s.major = 'COSC';

 

---global temporary tables-------------

SELECT column_name, ..., column_name INTO ##global_temporary_tablename 

 FROM permanent_tablename 

 WHERE...

 

SELECT s.sname, s.stno, d.dname, s.class INTO ##Temp1 

 FROM Student s, Department_to_major d 

 WHERE s.major = d.dcode 

 AND (s.class = 1 or s.class = 2) 

 AND s.major = 'COSC';

 

DROP TABLE ##Temp1

 

---UNION--------

SELECT * FROM TableA UNION SELECT * FROM TableB

 

SELECT sname 

 FROM Student 

 WHERE major = 'COSC' 

 UNION 

 SELECT sname 

 FROM Student 

 WHERE major = 'MATH'

 

SELECT sname 

 FROM Student 

 WHERE major = 'COSC' 

 UNION ALL 

 SELECT sname 

 FROM Student 

 WHERE major = 'MATH'

 

---IN--------

SELECT sname, class 

 FROM Student 

 WHERE class IN (3,4)

 

SELECT Student.sname 

 FROM Student 

 WHERE Student.stno 

IN (SELECT g.student_number FROM Grade_report g WHERE g.grade = 'A')

 

SELECT sname, class FROM Student WHERE class NOT IN (2)

 

SELECT * FROM department_to_major d 

 WHERE d.dcode 

NOT IN (SELECT dcode FROM department_to_major d, instructor i WHERE d.dcode=i.teaches

 

---INTERSECT(相交)---------------

SELECT s.stno 

 FROM Student s 

 INTERSECT 

 SELECT g.student_number 

 FROM Grade_report g 

 WHERE g.grade = 'A'

 

---NOT...IN----------

SELECT sname, class 

 FROM Student 

 WHERE class IN (2,3,4) AND NOT class IN (2)

 

SELECT sname 

 FROM Course c JOIN (Section se JOIN 

 (Student s JOIN Grade_report g 

 ON s.stno = g.student_number) 

 ON se.section_id = g.section_id) 

 ON c.course_number = se.course_num 

 AND c.course_name LIKE 'ACC%' 

 UNION 

 SELECT sname 

 FROM Student s JOIN 

 (Department_to_major d 

 JOIN (Course c JOIN 

 (Room r JOIN Section se 

 ON r.room = se.room) 

 ON se.course_num = c.course_number) 

 ON c.offering_dept = d.dcode) 

 ON s.major = d.dcode 

 AND r.ohead = 'Y'

 

---子查询-------------

SELECT * FROM Room WHERE capacity < (SELECT AVG(capacity) FROM Room)

SELECT * FROM Room WHERE bldg = (SELECT bldg FROM Room WHERE capacity > 10)

 

---GROUP BY---------------

SELECT class, COUNT(*) AS [count] FROM Student GROUP BY class

 

SELECT class, major, COUNT(*) AS [count] FROM Student GROUP BY major, class

 

---HAVING-----------

SELECT class, COUNT(*) AS [count] FROM Student GROUP BY class HAVING COUNT(*) > 9

 

---NOT EXISTS----------

SELECT name, langu 

FROM Cap x 

WHERE NOT EXISTS 

 (SELECT 'X' FROM Cap y WHERE NOT EXISTS 

 (SELECT 'X' FROM Cap z WHERE x.langu = z.langu AND y.name = z.name))

转载于:https://www.cnblogs.com/hxworm/articles/1936755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值