Boolean operator: NOT

Monday, August 3rd, 2009

 
mysql> delimiter $$
mysql>
mysql>
mysql> CREATE PROCEDURE myProc()
    -> BEGIN
    ->         DECLARE a INT DEFAULT 2;
    ->         DECLARE b INT DEFAULT 3;
    ->         DECLARE c FLOAT;
    ->
    ->         IF NOT (a=b) THEN
    ->                 SELECT ‘a is not equal to b‘;
    ->         END IF;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;
mysql> call myProc();
+———————+
| a is not equal to b |
+———————+
| a is not equal to b |
+———————+
1 row in set (0.02 sec)

Query OK, 0 rows affected (0.02 sec)

mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)

mysql>

        

For checking a uniform condition you may use the CASE construct

Monday, July 20th, 2009

 
mysql>

mysql>
mysql>
mysql> DELIMITER //
mysql> CREATE FUNCTION myFunction (delivery_day INT(1)) RETURNS INT(2)
    -> BEGIN
    ->
    -> DECLARE shipping_cost INT(2) DEFAULT 0;
    ->
    -> CASE delivery_day
    -> WHEN 1 THEN
    ->         SET shipping_cost = 20;
    -> WHEN 2 THEN
    ->         SET shipping_cost = 15;
    -> WHEN 3 THEN
    ->         SET shipping_cost = 10;
    -> ELSE
    ->         SET shipping_cost = 5;
    -> END CASE;
    -> RETURN shipping_cost;
    ->
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql>
mysql> select myFunction(1);
+—————+
| myFunction(1) |
+—————+
|            20 |
+—————+
1 row in set (0.00 sec)

mysql>
mysql> select myFunction(2);
+—————+
| myFunction(2) |
+—————+
|            15 |
+—————+
1 row in set (0.00 sec)

mysql>
mysql> select myFunction(3);
+—————+
| myFunction(3) |
+—————+
|            10 |
+—————+
1 row in set (0.00 sec)

mysql>
mysql> drop function myFunction;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>

        

Using Control Flow Functions in a SELECT Statement

Sunday, July 19th, 2009

Drop table DVDs;

CREATE TABLE DVDs (
   ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name VARCHAR(60) NOT NULL,
   NumDisks TINYINT NOT NULL DEFAULT 1,
   RatingID VARCHAR(4) NOT NULL,
   StatID CHAR(3) NOT NULL
)
ENGINE=INNODB;

INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)
VALUES (‘Christmas‘, 1, ‘NR’, ’s1′),
       (‘Doc‘,       1, ‘G’,  ’s2′),
       (‘Africa‘,    1, ‘PG’, ’s1′),
       (‘Falcon‘,    1, ‘NR’, ’s2′),
       (‘Amadeus‘,   1, ‘PG’, ’s2′),
       (‘Show‘,      2, ‘NR’, ’s2′),
       (‘View‘,      1, ‘NR’, ’s1′),
       (‘Mash‘,      2, ‘R’,  ’s2′);

SELECT Name AS Title, StatID AS Status, RatingID AS Rating,
   IF(NumDisks>1, ‘Check for extra disks!‘, ’Only 1 disk.‘) AS Verify
FROM DVDs
ORDER BY Title;

           
       

Use IN and BETWEEN AND

Sunday, July 19th, 2009

Drop table employee;

CREATE TABLE employee (
    id int unsigned not null auto_increment primary key,
    firstname varchar(20),
    lastname varchar(20),
    title varchar(30),
    age int,
    yearofservice int,
    salary int,
    perks int,
    email varchar(60)
); 

INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("John", "Chen", "Senior Programmer", 31, 3, 120000, 25000, "j@hotmail.com");

INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Jan", "Pillai", "Senior Programmer", 32, 4, 110000, 20000, "g@yahoo.com");

INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Ane", "Pandit", "Web Designer", 24, 3, 90000, 15000, "a@gmail.com");

INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Mary", "Anchor", "Web Designer", 27, 2, 85000, 15000, "m@mail.com");

INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Fred", "King", "Programmer", 32, 3, 75000, 15000, "f@net.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("John", "Mac", "Programmer", 32, 4, 80000, 16000, "j@hotmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Arthur", "Sam", "Programmer", 28, 2, 75000, 14000, "e@yahoo.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Alok", "Nanda", "Programmer", 32, 3, 70000, 10000, "a@yahoo.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Susan", "Ra", "Multimedia Programmer", 32, 4, 90000, 15000, "h@gmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Paul", "Simon", "Multimedia Programmer", 23, 1, 85000, 12000, "ps@gmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Edward", "Parhar", "Multimedia Programmer", 30, 2, 75000, 15000, "a@hotmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Kim", "Hunter", "Senior Web Designer", 32, 4, 110000, 20000, "kim@coolmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Roger", "Lewis", "System Administrator", 32, 3, 100000, 13000, "roger@mail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Danny", "Gibson", "System Administrator", 31, 2, 90000, 12000, "danny@hotmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Mike", "Harper", "Senior Marketing Executive", 36, 1, 120000, 28000, "m@gmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Mary", "Sunday", "Marketing Executive", 31, 5, 90000, 25000, "monica@bigmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Jack", "Sim", "Marketing Executive", 27, 1, 70000, 18000, "hal@gmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Joe", "Irvine", "Marketing Executive", 27, 1, 72000, 18000, "joseph@hotmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Henry", "Ali", "Customer Service Manager", 32, 3, 70000, 9000, "shahida@hotmail.com");
INSERT INTO employee (firstname, lastName, title, age, yearofservice, salary, perks, email) values ("Peter", "Champion", "Finance Manager", 32, 2, 120000, 25000, "peter@yahoo.com");

select * from employee;

/* The statement displays all non programmers who are not between the ages 
of 28 and 32.
*/
SELECT firstname, lastName, title, age from
       employee where title NOT IN
       (‘Programmer‘, ’Senior Programmer‘,
       ‘Multimedia Programmer‘) AND
       age NOT BETWEEN 28 AND 32;

           
       

Disallowing NULLs

Wednesday, July 15th, 2009

/*
mysql> DROP TABLE Employee;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE Employee (
    ->     Name VARCHAR(50) NOT NULL,
    ->     Phone VARCHAR(15) NOT NULL
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql> Describe Employee;
+——-+————-+——+—–+———+——-+
| Field | Type        | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| Name  | varchar(50) |      |     |         |       |
| Phone | varchar(15) |      |     |         |       |
+——-+————-+——+—–+———+——-+
2 rows in set (0.01 sec)

mysql> INSERT INTO Employee (Name, Phone)
    ->             VALUES (’Joe Yin’, ’666 2323′);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employee (Name) VALUES (’John Doe’);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employee (Name, Phone) VALUES (’John Doe’, NULL);
ERROR 1048 (23000): Column ’Phone’ cannot be null
mysql> Select * from Employee;
+———-+———-+
| Name     | Phone    |
+———-+———-+
| Joe Yin  | 666 2323 |
| John Doe |          |
+———-+———-+
2 rows in set (0.00 sec)

*/  
DROP TABLE Employee;

CREATE TABLE Employee (
    Name VARCHAR(50) NOT NULL, 
    Phone VARCHAR(15) NOT NULL
);

Describe Employee;

INSERT INTO Employee (Name, Phone)
            VALUES (‘Joe Yin‘, ’666 2323‘);
INSERT INTO Employee (Name) VALUES (‘John Doe‘);
INSERT INTO Employee (Name, Phone) VALUES (‘John Doe‘, NULL);

Select * from Employee;